【发布时间】:2020-05-01 16:29:09
【问题描述】:
我目前正在将 iOS 应用程序从 Objective-C 移植到 Swift。在这样做时,我偶然发现了一个我正在努力解决的问题。
我有一个可以设置为 AnyObject 的变量(“值”),尤其是它可以是 String、Array、Dictionary 和 Set 类型。现在,在我之前的代码中,我正在测试我的“值”变量的值类型,以便进一步使用它:
id value = [myDatahandler getValue];
if (([value isKindOfClass:[NSSet class]] || [value isKindOfClass:[NSArray class]]) && [value count] > 0) {
// do something
}
尝试在 Swift 中做同样的事情似乎行不通...
var value: AnyObject? = myDatahandler.getValue()
if (value is Set || value is Array) && value!.count > 0 {
// Error:
// Generic parameter 'Element' could not be inferred in cast to 'Array'
// Generic parameter 'Element' could not be inferred in cast to 'Set'
}
经过几个小时寻找正确的方法,但没有找到任何有用的东西,我希望社区可以在这里拯救我......
有什么建议吗?
【问题讨论】:
-
类似这样的常用方法是通过使用协议或枚举之类的东西来摆脱“任何”。我无法为此提供具体的解决方法,但这是我最初的想法。您的
myDataHandler是如何定义的?也许这可以返回一个包含该值的枚举。这样您就可以打开枚举以从中获取基础值。
标签: arrays objective-c swift typeof anyobject