Swift 中的隐式解包选项似乎不起作用
Implicitly Unwrapped Optionals in Swift does not seem to work
我正在阅读 Swift 编程语言一书来研究强引用循环。无法在 Xcode 中编译应该工作的示例之一。我不明白为什么代码被破坏了。
关于这个 chapter,有一个看起来像这样的例子:
当我尝试在 Xcode 中编译此代码时,抛出此错误:'self' 在所有存储的属性初始化之前使用 。但是,我认为它应该能够编译,因为我将 capitalCity 设置为默认情况下为 nil 的隐式解包选项,所以在我设置 self.name = name 之后所有存储的属性应该已经正确设置了。
我在这里想念什么?需要进行哪些更改才能编译代码?
提前致谢!
由于初始化器还没有设置对象,你不能用它初始化另一个对象。
您需要初始化城市,然后设置属性。
只需更改(let 为 var)
let capitalCity: City!
至
var capitalCity: City!
发生这种情况,可能是因为它不能是常量值,因为我们在初始化期间设置了它。
更新:
我不知道为什么我被否决了!。这是书中的例子,不编译。但是如果你像我说的那样把 let 改成 var,你就会成功!
谁能提供一个代码修改,让书中的代码可以编译!?
我只能承认我不应该写关于在初始化程序中设置 let 的内容,但我认为很明显我并不是说你不能在初始化程序中设置常规 let
let
语句没有将可选值默认初始化为 nil,因为否则写 let foo:Bar!
会给你一个总是 nil 的 foo
并且你无法初始化它在随后的声明中。
var
合适的原因是您希望默认初始化为 nil 以便您可以使用 self 引用初始化 City
对象,以便最终初始化您的实际 capitalCity
真正双重初始化的值。
该代码在设计上具有循环 class 依赖性,因此这是该设计的副作用。
let
的这种行为是 Swift 1.2 中的新行为,请尝试 Xcode 6.2 或更早版本中的示例,您会发现它可以编译。
我正在阅读 Swift 编程语言一书来研究强引用循环。无法在 Xcode 中编译应该工作的示例之一。我不明白为什么代码被破坏了。
关于这个 chapter,有一个看起来像这样的例子:
当我尝试在 Xcode 中编译此代码时,抛出此错误:'self' 在所有存储的属性初始化之前使用 。但是,我认为它应该能够编译,因为我将 capitalCity 设置为默认情况下为 nil 的隐式解包选项,所以在我设置 self.name = name 之后所有存储的属性应该已经正确设置了。
我在这里想念什么?需要进行哪些更改才能编译代码?
提前致谢!
由于初始化器还没有设置对象,你不能用它初始化另一个对象。
您需要初始化城市,然后设置属性。
只需更改(let 为 var)
let capitalCity: City!
至
var capitalCity: City!
发生这种情况,可能是因为它不能是常量值,因为我们在初始化期间设置了它。
更新:
我不知道为什么我被否决了!。这是书中的例子,不编译。但是如果你像我说的那样把 let 改成 var,你就会成功!
谁能提供一个代码修改,让书中的代码可以编译!?
我只能承认我不应该写关于在初始化程序中设置 let 的内容,但我认为很明显我并不是说你不能在初始化程序中设置常规 let
let
语句没有将可选值默认初始化为 nil,因为否则写 let foo:Bar!
会给你一个总是 nil 的 foo
并且你无法初始化它在随后的声明中。
var
合适的原因是您希望默认初始化为 nil 以便您可以使用 self 引用初始化 City
对象,以便最终初始化您的实际 capitalCity
真正双重初始化的值。
该代码在设计上具有循环 class 依赖性,因此这是该设计的副作用。
let
的这种行为是 Swift 1.2 中的新行为,请尝试 Xcode 6.2 或更早版本中的示例,您会发现它可以编译。