【问题标题】:swift What difference between 'self' and 'Self'?swift 'self' 和 'Self' 和有什么区别?
【发布时间】:2015-12-03 03:04:49
【问题描述】:

问题:“自我”和“自我”有什么区别?当我在超类中定义一个函数以返回子类的类型时,如何在函数实现中使用“Self”?

函数调用者的自身类型应该返回什么类型?是不是基类型NSObject?

【问题讨论】:

  • 请发布实际代码而不是屏幕截图。 See here 了解详情。谢谢。
  • Self 仅用于通用约束。您可能想要做的是使用self.dynamicType。
  • 您会返回类似self.dynamicType.init() 的内容。但是你只能调用标记为required的初始化器。

标签: swift


【解决方案1】:

当您编写协议和协议扩展时,Self(大写 S)和 self(小写 S)之间存在区别。当与大写的 S 一起使用时,Self 指的是符合协议的类型,例如String 或 Int。当与小写 S 一起使用时,self 指的是该类型内部的值,例如“你好 Swift” 或 786。

例如,考虑BinaryInteger 上的这个扩展:

extension BinaryInteger {
    func squared() -> Self {
        return self * self
    }
}

请记住,带有大写 S 的 Self 指的是符合协议的任何类型。在上面的示例中,Int 符合 BinaryInteger,因此当在 Int 上调用时,该方法会有效地读取:

func squared() -> Int {
    return self * self
}

另一方面,带有 小写 S 的 self 指的是该类型所持有的任何值。如果上面的示例在存储值 8 的 Int 上调用,它实际上是这样的:

func squared() -> Int {
    return 8 * 8
}

【讨论】:

  • @ravinda 很好的解释 +1
【解决方案2】:

您应该使用self,而不是Self。

另外,正如其他人所指出的,请尝试self.dynamicType。

此外,我建议您在 Google 上搜索“如何检查 Swift 类型”。

希望有所帮助:)

从此链接引用:Distinction in Swift between uppercase "Self" and lowercase "self"

“Self 指的是协议内部当前“事物”的类型(符合协议的任何事物)。有关其使用示例,请参见 Protocol func 返回 Self。

我为 Self 找到的唯一官方文档是在 Swift 编程语言中的协议相关类型声明中。令人惊讶的是,关于协议或嵌套类型的部分中没有记录它。”

另外:https://forums.developer.apple.com/thread/5479

【讨论】:

  • 嘿,看到 OP 的问题是两者之间有什么区别,而不是使用哪个。因此,请在您的帖子中包含对该问题的实际答案。
  • 另外,建议谷歌的事情应该是评论,而不是答案:)
  • 嗯,有时,当答案已经在网络上很容易获得时,这是您可以给出的唯一答案......
猜你喜欢
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-16
  • 2015-03-07
相关资源
最近更新 更多