Swift 2 - 检查空数组的类型(内省)
Swift 2 - Check Type of empty Array (Introspection)
我目前正在 Swift 2 中进行内省,在获取数组的特定类型时遇到问题(在本例中为 Array<String>
)。
var prop = obj.valueForKey("strings")!
if prop is Array<String> {
println("true")
}
if prop is Array<Int> {
println("true")
}
输出为:
true
true
应该是
true
false
有没有办法找出数组成员的类型? 例如,如果我将数组声明为 Array<String>
我想获取字符串或者至少能够检查它是否是。
MirrorType 目前也没有取得任何成功。
也许您想要的是数组中每个单独项目的类型,而不是数组本身的类型?如果您在 Swift 中使用集合类型,则存储在数组(或字典)中的所有项目都是同一类型(除非您将数组声明为数组,例如违反规则......这不是通常是必要的,或者想要的)。
通过声明一个带有初始值的数组,您会自动告诉编译器它们是什么类型。如果你这样做:
let obj = [1,2,3]
var property = obj[0]
if property is String {
print("true")
}
if property is Int {
print("true")
}
编译器会告诉你 属性 是 String 总是失败,实际上没有必要做那个测试(因为我们已经知道它总是会失败)。
另一方面,如果您正在使用 Objective-C API 和类型,则有时您可能需要测试类型,这是在 [=22] 中测试类型的一个很好的例子=] 包含不同类型项目的集合:
let userDefaults = NSUserDefaults.standardUserDefaults()
let lastRefreshDate: AnyObject? = userDefaults.objectForKey("LastRefreshDate")
if let date = lastRefreshDate as? NSDate {
print("\(date.timeIntervalSinceReferenceDate)")
}
希望对您有所帮助。
有两种方法可以达到你想要的效果:
if prop.dynamicType == Array<Int>.self
(或[Int].self
)优于if prop.dynamicType == [Int]().dynamicType {
,因为[Int]()
创建了一个未使用的"array of integers". 实例
- 通常,当您检查数组是否为特定类型时,您打算使用它
以某种方式(因此,您可能会将数组转换为
[Int]
)。话虽如此,我建议使用 if let arrayOfInts =
prop as? Array<Int> {
。使用此构造,您将检查
类型兼容性并准备以特殊方式处理您的数组(使用强制转换的 arrayOfInts
引用)。
不管怎样,你决定怎么做。
我目前正在 Swift 2 中进行内省,在获取数组的特定类型时遇到问题(在本例中为 Array<String>
)。
var prop = obj.valueForKey("strings")!
if prop is Array<String> {
println("true")
}
if prop is Array<Int> {
println("true")
}
输出为:
true
true
应该是
true
false
有没有办法找出数组成员的类型? 例如,如果我将数组声明为 Array<String>
我想获取字符串或者至少能够检查它是否是。
MirrorType 目前也没有取得任何成功。
也许您想要的是数组中每个单独项目的类型,而不是数组本身的类型?如果您在 Swift 中使用集合类型,则存储在数组(或字典)中的所有项目都是同一类型(除非您将数组声明为数组,例如违反规则......这不是通常是必要的,或者想要的)。
通过声明一个带有初始值的数组,您会自动告诉编译器它们是什么类型。如果你这样做:
let obj = [1,2,3]
var property = obj[0]
if property is String {
print("true")
}
if property is Int {
print("true")
}
编译器会告诉你 属性 是 String 总是失败,实际上没有必要做那个测试(因为我们已经知道它总是会失败)。
另一方面,如果您正在使用 Objective-C API 和类型,则有时您可能需要测试类型,这是在 [=22] 中测试类型的一个很好的例子=] 包含不同类型项目的集合:
let userDefaults = NSUserDefaults.standardUserDefaults()
let lastRefreshDate: AnyObject? = userDefaults.objectForKey("LastRefreshDate")
if let date = lastRefreshDate as? NSDate {
print("\(date.timeIntervalSinceReferenceDate)")
}
希望对您有所帮助。
有两种方法可以达到你想要的效果:
if prop.dynamicType == Array<Int>.self
(或[Int].self
)优于if prop.dynamicType == [Int]().dynamicType {
,因为[Int]()
创建了一个未使用的"array of integers". 实例
- 通常,当您检查数组是否为特定类型时,您打算使用它
以某种方式(因此,您可能会将数组转换为
[Int]
)。话虽如此,我建议使用if let arrayOfInts = prop as? Array<Int> {
。使用此构造,您将检查 类型兼容性并准备以特殊方式处理您的数组(使用强制转换的arrayOfInts
引用)。
不管怎样,你决定怎么做。