5
4

2 回答 2

3

NSObject通过向以下内容添加约束,我能够让它停止崩溃并实际工作T

class Widget<T:NSObject>
{
    var value : T?

    init(value:T?)
    {
        self.value = value
    }

    func description() -> String
    {
        let valueType = value?.self

        return "Widget is a \(valueType?.className)"
    }
}

let stringWidget = Widget(value:"Hello")
let numericWidget = Widget(value:9001)
let doubleWidget = Widget(value:3.14159)
let arrayWidget = Widget(value:[0xFEED, 0xBEEF, 0xCAFE])

stringWidget.description()
numericWidget.description()
doubleWidget.description()
arrayWidget.description()

也就是说,我确实相信操场和编译器有很多错误,包括您遇到的行为。

我也无法通过创建Widget(value:Widget(value:x)).

于 2014-06-05T17:48:03.280 回答
1

我更喜欢约束: AnyObject(不需要导入),但 B必须引用一个类。

// import Foundation

class A <B: AnyObject> { let it: B; init(_ b: B) { it = b } }

class C { let DCI = 601 }

println( A(C()).it.DCI ) // 601
于 2014-06-05T22:56:26.613 回答