作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个名为 Foo 的枚举,类型为字符串。
我有一个名为 MyStruct 的结构,它有一个可选的 Foo 实例,我希望它最初为 nil。
MyStruct 也有一个可失败的初始化器。
问题:当我使 MyStruct 同时具有可失败的初始化器和可选的 Foo 实例(最初为 nil)时,我的构建失败并得到“Segmentation fault: 11”。
当我将 MyStruct 重命名为 MyClass 并将其类型更改为类时没有问题。
有没有人能告诉我为什么我不能在结构中同时使用可失败初始化器和初始化为 nil 的可选枚举?
import Foundation
enum Foo: String {
case Bla = "blabla"
}
public struct MyStruct {
var myEnum: Foo?
public init?() {}
}
var myStruct = MyStruct()
if let myEnum = myStruct?.myEnum {
println("myEnum is not nil => \(myEnum.rawValue)")
} else {
println("myEnum is nil")
}
最佳答案
崩溃来自您空的 init?()
方法。这是一个编译器错误,您应该打开一个关于它的雷达。问题是这个函数不可能真的失败,而 Swift 不喜欢这样。例如,以下将编译(但如果 ignoreme
是 Bool 仍会崩溃):
var ignoreme = 0
public struct MyStruct {
var myEnum: Foo?
public init?() {
if ignoreme != 0 { return nil }
}
}
有时(但不总是)当 init?()
没有实际的失败案例时,编译器会感到困惑。
关于swift - 在 Swift 中,如何在结构中将可选枚举初始化为 nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29472044/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!