美文网首页
对Swift中type和Self的理解

对Swift中type和Self的理解

作者: lanmoyingsheng | 来源:发表于2018-08-22 11:40 被阅读546次
一、type
// 例如类A中
class A : NSObject {
    
    class func classMethod() {
        
        let type1 = type(of: self) // 为A.type.type
        let type2 = self // 为A.type
        let type3 = A.self // 为A.type
    }
    
    func instanceMethod() {
        
        let type1 = type(of: self) // 为A.type
        let type2 = self // 为A的实例
        let type3 = A.self // 为A.type
    }
}

type对应OC中的Class,是类类型。

二、Self

'Self' is only available in a protocol or as the result of a method in a class
class A : NSObject {

 class func classMethod() -> Self {
        
        let dd = Template(type: self)
        return dd
    }
    class func Template<T>(type: T.Type) -> T {
        return A() as! T
    }

  func instanceMethod() -> Self {
    
      return self
  }
}

Self当作为类方法返回值,返回的也必须是实例,不过很少这样做罢了。在Swift中self和Self,可以看到Self作为协议方法返回值,返回的也是实例。

复制结论
综上可看出对于Self来说它只是表示特定类型,并且只能用在协议中或者作为某个类的方法的返回值类型,而self在实例方法中代指当前实例,在类方法中则代指当前类。

相关文章

  • 对Swift中type和Self的理解

    一、type type对应OC中的Class,是类类型。 二、Self Self当作为类方法返回值,返回的也必须是...

  • Weak self and unowned self expla

    Swift 中的 Weak self 和 unowned self 对我们许多人来说很难理解。 尽管 Automa...

  • 理解 Swift 中的元类型:.Type 与 .self

    元类型 元类型就是类型的类型。比如我们说 5 是 Int 类型,此时 5 是 Int 类型的一个值。但是如果我问 ...

  • 应用swift中的.self与.Type

    在开发插件化播放器时遇到了一个插件批量初始化的需求:不同的播放器需要配置不同的插件列表,而每一个插件的构造函数是不...

  • Swift中self和Self

    是什么 相信大家都知道self这个关键字的具体作用,它跟OC里的self基本一样。但是对于Self来说...(WT...

  • swift之元类型:.Type和.self

    元类型就是类型的类型。 比如我们说 5 是 Int 类型,此时 5 是 Int 类型的一个值。但是如果我问 Int...

  • Swift中Self和self的区别

    当编写protocol和针对protocol进行扩展时,Self(大写S)和self(小写S)之间存在差异。当与大...

  • python之理解super及MRO列表

    python之理解super type 类。 object-or-type 类,一般是 self。 1、super...

  • swift 中 Self 与self

    前提 在swift 开发过程中,尤其是第三方库中,我们多次看到首字母大写的Self,很多时候不明白其中意思,Sel...

  • block详解

    __weak typeof(self) weakSelf = self;self.handler = ^{type...

网友评论

      本文标题:对Swift中type和Self的理解

      本文链接:https://www.haomeiwen.com/subject/cfueiftx.html