问题的最简化版本可以通过代码表达:
struct Outer {
class Person {
var name:String?
}
let member = Person()
}
抛出编译错误:Outer.Person 无法构造,因为它没有可访问的初始值设定项。
关于为什么它不能编译的任何提示?
可能的解决方法(任何一种都会消除编译错误):
- 将可选属性的初始值设置为 nil var name:String? = 无 。但这是否与将其声明为可选的目的部分矛盾(不需要在声明时显式赋值)?
- 在创建类实例时明确提及引用类型 let member:Person = Person() 。为什么类型推断不在幕后做同样的事情?
- 用类替换外部结构。
作为观察,如果类是本地的,属于 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()
}
