【发布时间】:2017-06-02 01:28:40
【问题描述】:
Swift 目前是否支持类型具体化?我无法让这个 sn-p 正常工作:
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
我错过了什么吗?
尽管如此,我还看到了另外两篇关于同一主题的帖子,但似乎更侧重于构建,并且可以通过创建相同类型的新实例来解决:
【问题讨论】:
-
我认为这与 Swift 如何实现泛型有关。与 C++ 模板不同,Swift 中的泛型更像普通方法需要额外的类型参数。
标签: swift