gpt4 book ai didi

swift - 在 Swift 中,如何在结构中将可选枚举初始化为 nil?

转载 作者:可可西里 更新时间:2023-11-01 01:41:13 25 4
gpt4 key购买 nike

我有一个名为 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/

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