Swift AnyObject为?设置<t>崩溃

时间:2015-08-24 21:29:20

标签: swift generics crash foundation

在使用Swift进行编程时,我遇到了以下行为:

如果您运行此代码段:

import Foundation

class A : Hashable, Equatable {

    var hashValue: Int {
        get { return ObjectIdentifier(self).hashValue }
    }

}

func ==(a:A, b:A) -> Bool {
    return a === b
}

typealias T = A
typealias TCollection = Array<T>

var element:TCollection = [T()]
var array:[AnyObject] = [element]

println(array[0] as? TCollection)

打印:

Optional([SetCrashTest.A])

但是,如果您将TCollectionArray<T>更改为Set<T>,则会因以下错误而崩溃:

Could not cast value of type 'SetCrashTest.A' (0x1001d1530) to 'NSObject' (0x7fff72a9d0f0).

此外,如果我将TA更改为其他类型,例如IntStringCGFloat等,则会正常运行。 是什么导致这种行为?如何在没有崩溃的情况下进行这种可选的向下转换?

修改 尝试从Set<T>的{​​{1}} NSNotification中读取userInfo时,我遇到了此次崩溃。只有在此之后,我才构建了上面的例子;所以请不要建议使用[NSObject:AnyObject]代替[TCollection],因为[AnyObject]AnyObject API决定。NSNotification

0 个答案:

没有答案