美文网首页
Swift中的Self

Swift中的Self

作者: sasky2008 | 来源:发表于2018-11-05 15:17 被阅读12次

Self 作为返回值

  protocol CustomInit {
    func customInit() -> Self
  }

class MyAClass: CustomInit {

   var name: String?

   // return `Self`的自定义方法
   func customInit() -> Self {
     let result = type(of: self).init()
     result.name = name
     return result
   }

   // 不推荐使用的init方法
   func myErrorInit(_ name: String?) -> MyAClass {
     let result = MyAClass.init()
     result.name = name
     return result
   }

   // 便利构造器
   convenience init(_ name: String?) {
     self.init()
     self.name = name
   }

   required init() {}
}

一般作为返回值, 返回自己的类的对象.
这种时候我们可以使用Self替代类名, 这样对于定义协议很有利.

protocol CustomInit 便可以多个类同时使用, 而不会局限于一个class/struct

有人问我为什么写了一行

required init() {}

这是因为Swift要保证当前类和子类都能响应这个init方法. 也就是type后面的init().
这时候有两个方法解决, 一个是加一个required关键字, 另一个方法便是将此类, 设置为

final class MyAClass: CustomInit {}

相关文章

  • swift 中 Self 与self

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

  • Swift中self和Self

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

  • Swift中的Self

    Self 作为返回值 一般作为返回值, 返回自己的类的对象.这种时候我们可以使用Self替代类名, 这样对于定义协...

  • Swift中的self

    先来看一段代码 当然这段代码是有些问题的,但是却对研究我们今天的主题却是非常有用。 执行后打印出来的内容是这样的 ...

  • swift中的Self

    方法内部使用Self 可以用于获取当前类的静态变量(不管是在实例方法里还是静态方法里) 协议中使用Self 1.可...

  • swift中的.self

    有一个Person类 实例的.self Person类的实例的.self还是实例本身 打印结果: 类的.self ...

  • Swift中Self和self的区别

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

  • Weak self and unowned self expla

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

  • Swift中weak与unowned的区别

    在Swift的闭包中为了避免循环引用的问题,通常用[weak self] 或者[unowned self], 前者...

  • Swift中Self的使用

    Swift中Self的使用 用于消除访问属性,调用方法时所产生的歧义。 当函数的参数名和自身的属性名同名时,例如:...

网友评论

      本文标题:Swift中的Self

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