gpt4 book ai didi

ios - Swift 动态变量不能是可打印类型

转载 作者:行者123 更新时间:2023-11-28 09:28:51 25 4
gpt4 key购买 nike

我有一个包含两个 UITableViewControllers 的 Swift 项目。第二个 UITableViewController 链接到名为 Model 的 MVC 模型。根据我在第一个UITableViewController中选择的UITableViewCell,我想用Ints字符串。因此,我决定使用 Printable 协议(protocol)类型定义这些属性。同时,我想对这些属性之一执行键值观察。

现在,Model 看起来像这样:

class Model: NSObject {

let title: String
let array: [Printable]
dynamic var selectedValue: Printable //error message

init(title: String, array: [Printable], selectedValue: Printable) {
self.title = title
self.array = array
self.selectedValue = selectedValue
}

}

这里的问题是在selectedValue声明行出现如下错误信息:

Property cannot be marked dynamic because its type cannot be represented in Objective-C

如果我转到 Xcode Issue Navigator,我还可以阅读以下行:

Protocol 'Printable' is not '@objc'

有什么解决方法吗?

最佳答案

没有办法如你所愿。非 @objc 协议(protocol)不能在 Objective-C 中表示。一个原因是 Non-@objc 协议(protocol)可以表示非类类型(事实上,你说过你想将它用于 IntString,都是非类类型),Objective-C 中的协议(protocol)仅适用于对象。

KVO是为Objective-C设计的特性,所以你必须站在Objective-C的角度去思考你希望它看到什么。如果您在 Objective-C 中执行此操作,您将不希望拥有一个可以是对象(如 id)或非对象(如 int)的属性——你甚至不能宣布。相反,正如您在评论中所说,您可能希望它只是对象。并且您希望能够使用 Foundation 的桥接将 Int 转换为 NSNumber * 并将 String 转换为 NSString *。这些是继承自 NSObject 的常规 Cocoa 类,它实现了 Printable

所以在我看来你应该只使用 NSObjectNSObjectProtocol

关于ios - Swift 动态变量不能是可打印类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26371746/

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