gpt4 book ai didi

swift - 在不设置存储属性的情况下使 Swift 初始化程序失败

转载 作者:搜寻专家 更新时间:2023-10-31 22:35:49 24 4
gpt4 key购买 nike

我正在编写一个蓝牙控制的 keynote Remote 应用程序。这将使用 AppleScript 基于与 CoreBluetooth 框架的交互来控制 Keynote。

考虑这个类,它需要使用可选的 OSALanguage 初始化器。

class KeynoteController {

let applescriptLanguage: OSALanguage

init?() {
if let applescriptLanguage = OSALanguage(forName: "AppleScript") {
self.applescriptLanguage = applescriptLanguage
} else {
return nil // Compile error on this line
}
}

}

在这个例子中,如果没有名为 "AppleScript"OSALanguage,我想初始化我的 KeynoteController 失败(诚然不太可能,但设计很好).但是,在填充所有存储的属性之前,我无法从初始化程序返回。

我可以使 applescriptLanguage 成为可选的,但由于它不是可选的,并且如果初始化成功则它是常量,这看起来像是一个 hack。

设计这个的正确方法是什么?

最佳答案

问题似乎来自试图使 applescriptLanguage 成为非可选语言。编译器希望为它分配一个值,即使该对象初始化失败。

通过使它成为可选属性来修复它(隐式解包,因为它在初始化后实际上不应该为 nil)。

let applescriptLanguage: OSALanguage!

这对我来说似乎是一个编译器错误,但我不知道幕后发生了什么。

或者,您可以暂时将其分配给 else block 中的虚拟值。这会增加额外的初始化时间和内存分配,因此可能不是最好的主意,但如果您真的希望属性是非可选的,它会起作用。

} else {
self.applescriptLanguage = OSALanguage()
return nil
}

关于swift - 在不设置存储属性的情况下使 Swift 初始化程序失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28033165/

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