在Swift游乐场玩耍的时候,我注意到,Self大写字母"S"可以和小写一起使用self.它们之间有什么区别吗?如果是这样,这两者的用途是什么,特别是对于Self?
Rob*_*ier 70
Self指协议内部的当前"事物"的类型(符合协议的任何内容).有关其用法的示例,请参阅返回Self的Protocol func.
我找到的唯一官方文档Self是Swift编程语言中的协议关联类型声明.令人惊讶的是,在协议或嵌套类型的章节中没有记录.
在协议和扩展声明中使用Self else self
extension protocolName where Self: UIView
{
func someFunction()
{
self.layer.shadowColor = UIColor.red.cgColor
}
}
Run Code Online (Sandbox Code Playgroud)
Self也可以在类中使用,并且很有用。这是一篇关于它的文章。
这是一个例子。您有一个名为的课程MyClass。MyClass有方法返回它的实例。现在,您添加了一个MyClass名为的子类MySubclass。您希望这些方法返回的实例,MySubclass而不是MyClass。以下代码显示了如何执行此操作。请注意,这些方法可以是实例方法或类方法。
class MyClass: CustomStringConvertible {
let text: String
// Use required to ensure subclasses also have this init method
required init(text: String) {
self.text = text
}
class func create() -> Self {
return self.init(text: "Created")
}
func modify() -> Self {
return type(of: self).init(text: "modifid: " + text)
}
var description: String {
return text
}
}
class MySubclass: MyClass {
required init(text: String) {
super.init(text: "MySubclass " + text)
}
}
let myClass = MyClass.create()
let myClassModified = myClass.modify()
let mySubclass = MySubclass.create()
let mySubclassModified = mySubclass.modify()
print(myClass)
print(myClassModified)
print(mySubclass)
print(mySubclassModified)
Run Code Online (Sandbox Code Playgroud)
打印以下行:
// Created
// modifid: Created
// MySubclass Created
// MySubclass modifid: MySubclass Created
Run Code Online (Sandbox Code Playgroud)
我认为这个问题可以用一个简单的答案,更多的集中于差异之间Self和self,也许是针对那些较新的斯威夫特。
self - 显式引用当前类型或它出现的类型的实例。class MyClass {
func showClass() {
print("\(self)")
}
}
let someClass = MyClass()
someClass.showClass()
// prints "MyClass"
Run Code Online (Sandbox Code Playgroud)
Self-专门用于protocol和extension声明以引用符合协议的最终类型。protocol MyProtocol {
static func returnSelf() -> Self
}
class MyClass: MyProtocol {
// define class
}
MyClass.returnSelf()
// returns MyClass
Run Code Online (Sandbox Code Playgroud)
区别在于self在类型和类型的实例中使用它来引用它所在的类型;并Self用于协议和扩展中,实际type情况尚不清楚。
更简单地说,self在现有类型中使用;Self用于指代Self尚未进入的类型。
在此处阅读更多信息:
Self- https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#//apple_ref/doc/uid/TP40014097-CH34-XID_543self- https://docs.swift.org/swift-book/ReferenceManual/Expressions.html| 归档时间: |
|
| 查看次数: |
8780 次 |
| 最近记录: |