在此示例代码中,Self.self
的行为与预期不符。根据所选参数的类型,标识符属性的值不相同。
protocol Identifiable : class {
static var identifier: String { get }
}
extension Identifiable {
static var identifier: String {
return String(describing: Self.self)
}
}
class Animal : Identifiable {}
class Tiger : Animal {}
Animal.identifier // Animal
Tiger.identifier // Tiger
func identifiableIdentifier<T: Identifiable>(of type: T.Type) -> String {
type // Tiger.Type
return type.identifier
}
identifiableIdentifier(of: Tiger.self) // Animal
func animalIdentifier<T: Animal>(for type: T.Type) -> String {
type // Tiger.Type
return type.identifier
}
animalIdentifier(for: Tiger.self) // Tiger
有人知道为什么吗?