我想知道我是否可以做这样的事情:
override func someCocoaFunc(someParameter:AnyObject?) {
if let parameter = someParameter as! Tuple {
let parameterType = parameter.1
if parameterType == "Heads up, this is an Int" {
print(parameter.0 + 1) //prints 2
}
else {
//fallback
}
}
}
let myTuple = (1,"Heads up, this is an Int")
someCocoaFunc(myTuple)
显然,这是行不通的,因为Tuple不是课程,或者至少不是我可以强制使用的课程。有没有办法使它正常工作,如果可以的话如何?如果不是,确定类型的最佳方法是AnyObject
什么?我试过:
if parameter is Bool {
//some code
}
else if parameter is Int {
//some code
}
但这似乎不起作用,我认为是因为Bool只是Typealias'd Int之类的东西?因此,总而言之,我可以在这里使用元组吗?如果没有,我该怎么办?为了添加一些上下文,我正在编写一个用于不同目标的类,因此我无法确定该值是什么,只是它是Int还是Bool。
您不能在这里使用元组,因为它们是复合类型,因此没有类。
的问题if
是,为了兼容Bool
并Int
转换NSNumber
为该属性,它具有boolValue
andintegerValue
属性,如果您将其强制转换,则会调用该属性。所以0和1是等效于true
和false
,因此不明确的。
作为解决方案,我建议创建一个将两个值都保存为的类Optionals
:
class Holder {
let boolValue: Bool?
let intValue: Int?
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句