Self关键字

作者: sprint | 来源:发表于2015-09-23 14:35 被阅读136次

看清楚哦亲,是Self不是self

直接上代码:

protocol IntervalType {

    func clamp(intervalToClmap:Self) -> Self

}

这是什么鬼?

这么定义是因为我们不知道 未来谁要来实现IntervalType,而参数和返回类型不能写上具体值,

有同学说可以用IntervalType啊,是啊没错但是你调用时是不是得类型转换。。。。

如果我们希望在接口使用时的类型就是实现该接口本身的类型的话,就需要用Self进行指代

但是在这种情况下,Self不仅指代的是实现该接口的类型本身,也包括了这个类型的子类。

例如:

protocol Copyable {

   func copy() -> Self

}

class MyClass : Copyable {

    func copy() -> Self { //这时候Self代表MyClass

       //但是这里我们该怎么写呢?return ?

    }

}

你可能会写出这样的代码?

class MyClass : Copyable { 

      func copy() -> Self {

      return MyClass()

      }

}

你会得到一个编译时错误,因为该方法要求我们返回一个抽象的表示当前类型的Self,但是我们却返回了它的真实类型MyClass, 也许你觉得我们可以把方法的返回值Self改为MyClass,很快你又发现实现的方法和接口中的定义不一致,依然不能编译。

为了解决这个问题我们需要通过一个和上下文无关的,又能指代当前类型的方式初始化,那就是dynamicType.

func copy() -> Self {

  let copyResult = self.dynamicType.init()

return copyResult

}

而对于MyClass的子类 即使不重写copy方法也能很好的工作。

相关文章

  • Swift3.0 Self和self的区别

    相信大家都知道self关键字的作用, 但你知道Swift还有个Self关键字吗?Self关键字只能用在类里, 作为...

  • 04-面向对象语法-self关键字

    一、self(关键字)的用途: 二、self访问成员变量(self -> 成员变量) 三、self调用方法可以利用...

  • 12.18

    一、python USB是半双工通讯 self:关键字,是指对象 ——init——初始化构造函数关键字 self....

  • Django类视图

    关键字 response self request object

  • Self关键字

    看清楚哦亲,是Self不是self 直接上代码: protocol IntervalType { func cl...

  • self关键字

    Self是一个指针,谁调用了当前方法,self就指向谁 【出现在对象方法中,就代表着当前对象,出现在类方法中,就代...

  • Self关键字

    Self关键字代表什么 在实例方法中Self指代本类的实例对象。在类方法中Self指代类对象 为什么可以在方法中使...

  • Self关键字

    OC提?供了两个保留字self和superOC语言中的self,就相当于C++、Java中的this指针。 要理解...

  • 探究Objective-C中self 与super的区别与底层实

    1、self和super关键字解释? (1)官方文档中self相关解释: Whenever you’re writ...

  • [OC]self与super调用本质分析

    一、self 基本说明 在日常开发中,我们经常使用到self关键字,比如,访问属性,调用实例方法等。那么self到...

网友评论

    本文标题:Self关键字

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