我的AnyObject
类型可以是String
,Int
或Bool
类型。我需要区分它们。
此代码尝试这样做,但它认为Bool
为Int
:
import Cocoa
var value: AnyObject
func checkType(value: AnyObject) -> String {
if let intvalue: Int = value as? Int {
return("It is an integer")
} else if let boolvalue: Bool = value as? Bool {
return("It is an boolean")
} else if let stringvalue: String = value as? String {
return("It is an string")
}
return "not found"
}
value = "hello"
checkType(value) // It is an string
value = 1
checkType(value) // It is an integer
value = true
checkType(value) // It is an integer
答案 0 :(得分:2)
func checkType<T>(value: T) -> String {
var statusText = "not found"
if value is Int {
statusText = "It is an integer"
} else if value is Bool {
statusText = "It is an boolean"
} else if value is String {
statusText = "It is an string"
}
return statusText
}
AnyObject
无法隐式向下转换为Swift中的任何类型。对于这种情况,您可以改为使用Generics
。
通用代码使您能够根据您定义的要求编写可以使用任何类型的灵活,可重用的函数和类型。 Read more。
答案 1 :(得分:0)
与我合作的方法是使用镜像结构。
let value: Any? = 867
let stringMirror = Mirror(reflecting: value!)
let type = stringMirror.subjectType
print(stringMirror.subjectType)
if type == Bool.self {
print("type is Bool")
} else if type == String.self {
print("type is string")
} else if type == Int.self {
print("type is Int")
}
使用任何,因为 Int,String,Bool 是结构。 如果您只是尝试区分使用 的类应该有效。
if value is NSString {
print("type is NSString")
}