Swift 目前支持类型具体化吗?我无法让这段代码正常工作:
import Swift
protocol P { var name:String { get set } }
class A : P { var name:String = "A" }
class B : P { var name:String = "B" }
class C : P { var name:String = "C" }
func inspect(var p:P) { println("should only be C: \(p.name)") }
func inspect(var p:A) { println("a: \(p.name)") }
func inspect(var p:B) { println("b: \(p.name)") }
func failsToRetainType<T:P>(t:T) {
print("inspecting \(t.name): ")
// let t = t.dynamicType
inspect(t)
}
inspect(A())
inspect(B())
inspect(C())
failsToRetainType(A()) // expect A, get C
failsToRetainType(B()) // expect B, get C
failsToRetainType(C()) // expect C, get C
我错过了什么吗?
尽管如此,我已经看到另外两篇关于同一主题的帖子,但它们似乎更侧重于构建,并且可以通过创建相同类型的新实例来解决:
最佳答案
据我所知,您需要主动将泛型函数中的实例转换回特定类型:
func failsToRetainType<T:P>(t:T) {
print("inspecting \(t.name): ")
switch t {
case let t as A: inspect(t)
case let t as B: inspect(t)
default: inspect(t)
}
}
// inspecting A: a: A
// inspecting B: b: B
// inspecting C: should only be C: C
关于Swift 类型删除/具体化行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26900546/