默认初始值设定项不能按结构中包含的类的预期工作

时间:2015-03-31 17:15:08

标签: swift

该问题的大多数简化版本可以通过代码表示:

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

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

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

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

  4. 作为观察,如果类是本地的,属于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

1 个答案:

答案 0 :(得分:3)

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()
}