将泛型类型转换为Any?

NSA*_*ict 2 generics swift

我有一个Box使用泛型参数调用的类T.

出于某种原因,在Swift中将Box<String>(或任何其他类型)强制转换为无效Box<Any>.

class Box<T> {}

var box: Box<Any>?
box = Box<String>() // 'String' is not identical to 'Any'
Run Code Online (Sandbox Code Playgroud)

在Java中,有一个?代表任何类型.(Box<?>)

我在斯威夫特可以做些什么?

Bry*_*hen 7

简短的回答是:你不能Box<String>,Box<Any>因为他们之间没有关系.

此页面适用于Java,但也适用于此处

给定两个具体类型A和B(例如,数量和整数),MyClass的<A> 没有关系到MyClass的<B>,而不管是否甲乙是相关的.MyClass <A>和MyClass <B>的公共父是Object.

除非你明确定义一个关系.例如支持隐式转换运算符:

class Box<T> {
    func __conversion<U>() -> Box<U> {
        // do whatever required for conversion
        // try reinterpretCast if you can't make type system happy
        // which will give you runtime error if you do it wrong...
        return Box<U>()
    }
}
Run Code Online (Sandbox Code Playgroud)