gpt4 book ai didi

swift - 参数类型 'Int' 不符合预期类型 'NSCoding & NSCopying & NSObjectProtocol'

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

我是 Swift 的新手,正在尝试一些教程来学习和完善我在 Swift 方面的知识。我在这段代码中偶然发现了我不理解的上述错误。如果你们中的任何人有想法,请在这里解释错误。

    let textChoices =   [
ORKTextChoice(text: "Create a ResearchKit app", value:0),
ORKTextChoice(text: "Seek the Holy grail", value:1),
ORKTextChoice(text: "Find a shrubbery", value:2)
]

我通过 Xcode 提供的建议解决了错误,现在我的代码看起来像

    let textChoices =   [
ORKTextChoice(text: "Create a ResearchKit app", value:0 as NSCoding & NSCopying & NSObjectProtocol),
ORKTextChoice(text: "Seek the Holy grail", value:1 as NSCoding & NSCopying & NSObjectProtocol),
ORKTextChoice(text: "Find a shrubbery", value:2 as NSCoding & NSCopying & NSObjectProtocol)
]

我从 answer 得到了另一个解决方案.虽然它有效,但我仍然不清楚问题和解决方案。我缺少的概念是什么。

最佳答案

由于 ORKTextChoice 的初始化器有一个抽象参数类型为 value:,Swift 将回退将传递给它的整数文字解释为 Int – 不符合 NSCodingNSCopyingNSObjectProtocol。它是 Objective-C 的对应物,NSNumber,但是确实如此。

尽管不是强制转换为 NSCoding & NSCopying & NSObjectProtocol,这会导致连接到 NSNumber(尽管是间接且不清楚的),您可以简单地使这座桥直接:

let textChoices = [
ORKTextChoice(text: "Create a ResearchKit app", value: 0 as NSNumber),
ORKTextChoice(text: "Seek the Holy grail", value: 1 as NSNumber),
ORKTextChoice(text: "Find a shrubbery", value: 2 as NSNumber)
]

您的原始代码在 Swift 3 之前就可以工作,因为 Swift 类型能够隐式桥接到它们的 Objective-C 对应物。然而,根据 SE-0072: Fully eliminate implicit bridging conversions from Swift , 这已不再是这种情况。您需要使用 as 显式设置桥接器。

关于swift - 参数类型 'Int' 不符合预期类型 'NSCoding & NSCopying & NSObjectProtocol',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39915157/

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