我在源代码的一部分中找到了以下方法,我无法理解Self.Type
和Self.Type.Type
property SomeProperty {
static func type() -> Self.Type.Type {
return self.dynamicType
}
}
也许有人可以给我一些见解?
上面的代码段来自以下扩展名:
extension Property {
static func size() -> Int {
return Int(ceil(Double(sizeof(self))/Double(sizeof(Int))))
}
static func type() -> Self.Type.Type { return self.dynamicType }
mutating func codeInto(pointer: UnsafePointer<Int>) {
(UnsafeMutablePointer(pointer) as
UnsafeMutablePointer<Self>).memory = self
}
mutating func codeOptionalInto(pointer: UnsafePointer<Int>) {
(UnsafeMutablePointer(pointer) as
UnsafeMutablePointer<Optional<Self>>).memory = self
}
}
答案 0 :(得分:2)
我怀疑原作者误解了static
如何与self
和子类一起使用。他们可能最初写这篇文章,打算返回这个特定子类的类型:&#34;
protocol TypeReturning {}
extension TypeReturning {
static func type() -> Self.Type {
return self.dynamicType
}
}
错误是dynamicType
在这里并没有什么意义。由于static
上下文,self
是的动态类型。但是作者会收到错误:
错误:无法转换类型&#39; Self.Type.Type&#39;的返回表达式返回类型&#39; Self.Type&#39;
我认为他们读了那个错误并想到了#啊;啊!我的退货类型错了&#34;他们修好了:
static func type() -> Self.Type.Type {
return self.dynamicType
}
正确的解决方案是:
static func type() -> Self.Type {
return self
}
虽然更好的解决方案可能是完全避免这种情况;这是一项不必要的功能。它们只是意味着SomeClass.self
,应该这样写。
.Type.Type
很有意义。它是元类型(类型本身的类型)。但我不知道你能用它做什么。类型不是Swift中的第一类对象。