gpt4 book ai didi

swift - 对于结构中包含的类,默认初始值设定项未按预期工作

转载 作者:搜寻专家 更新时间:2023-11-01 06:47:06 24 4
gpt4 key购买 nike

问题的最简化版本可以通过代码表达:

struct Outer {
class Person {
var name:String?
}
let member = Person()
}

抛出编译错误:Outer.Person 无法构造,因为它没有可访问的初始值设定项。
关于为什么它不能编译的任何提示?

可能的解决方法(任何一种都会消除编译错误):

  1. 将可选属性的初始值设置为 nil var name:String? = 无 。但这是否与将其声明为可选的目的部分矛盾(不需要在声明时显式赋值)?
  2. 在创建类实例时明确提及引用类型 let member:Person = Person() 。为什么类型推断不在幕后做同样的事情?
  3. 替换外部结构。


作为观察,如果类是本地的,属于 func ,则第二种解决方法无济于事:

func checkPerson() {
class Person {
var name:String?
}
let member:Person = Person()
// Still throws compile error
}


对于这种情况,解决方法 nr 1.(将初始值设置为 nil)是唯一可以消除编译错误的方法。

我正在使用 Xcode 6.2,OS X Yosemite 10.10.2

最佳答案

XCode 6.2(Swift 1.1) 中,您的 Person 类没有包含任何 init() 方法。

更改您的代码如下:

struct Outer {
class Person {
var name:String?
init(){}
}
let member = Person()
}

似乎 Apple 已经在 XCode 6.3 beta(Swift 1.2) 中修复了这个问题,它不会显示编译错误,即使您执行以下操作:

struct Outer {
class Person {
var name:String?
}
let member = Person()
}

关于swift - 对于结构中包含的类,默认初始值设定项未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29374547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com