gpt4 book ai didi

Swift 可失败初始化器调用 ExpressibleByStringLiteral 初始化器

转载 作者:行者123 更新时间:2023-12-04 12:21:34 25 4
gpt4 key购买 nike

这是我在 swift 遇到的最奇怪的问题,它让我疯狂地想弄清楚。
我有一个名为 Algorithm 的结构体符合 LosslessStringConvertible ,所以它有一个可失败的初始化。只是为了测试它,它总是返回 nil:

init?(_ description: String) {
return nil
}
Algorithm也符合 ExpressibleByStringLiteral ,使用之前的init:
extension Algorithm: ExpressibleByStringLiteral {
init(stringLiteral value: String) {
self.init(value)!
}
}
但是当我创建 Algorithm 的实例时从第一个 init 开始,我可以在 Xcode 中看到它不是可选的
let a = Algorithm("test")
a // a: Algorithm
然后我运行上面的代码,它在行 self.init(value)! 上崩溃了,来自 ExpressibleByStringLiteral在里面。
我一生都无法弄清楚为什么会发生这种情况。我调用了一个初始化程序,正在运行一个完全不同的初始化程序。
任何想法为什么会发生这种情况?
谢谢!

最佳答案

该问题已在 SR-10259 中报告似乎这是来自 Literal initialization via coercion (SE-0213) 的预期行为
可能的解决方法:

Algorithm.init("test") // don't coerce, call initializer
Algorithm(String("test")) // convert literal to a `String` first

关于Swift 可失败初始化器调用 ExpressibleByStringLiteral 初始化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69059391/

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