加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift协议函数:返回相同类型的符合类

发布时间:2020-12-14 04:46:21 所属栏目:百科 来源:网络整理
导读:我想知道是否可以在 Swift中完成类似java(或c)的操作: 我有一个协议: protocol Prot1 { func returnMyself() - Prot1} 并且一个类符合协议Prot1. 我可以强制函数returnMyself()的返回类型与下面的类的类型相同吗? class MyClass: Prot1 { public func ret
我想知道是否可以在 Swift中完成类似java(或c)的操作:

我有一个协议:

protocol Prot1 {
   func returnMyself() -> Prot1
}

并且一个类符合协议Prot1.
我可以强制函数returnMyself()的返回类型与下面的类的类型相同吗?

class MyClass: Prot1 {
   public func returnMyself() -> MyClass {
      return self
   }
}

可能吗?

解决方法

只需将Self用于您的协议即可

protocol Prot1 {
   func returnMyself() -> Prot1
}

这是一个例子

protocol Animal {
    func mySelf() -> Self
}

class Feline: Animal {
    func mySelf() -> Self {
        return self
    }
}

class Cat: Feline { }

Feline().mySelf() // Feline
Cat().mySelf() // Cat

关于协议扩展

你也可以像这样在协议扩展中使用Self

protocol Animal {}

extension Animal {
    func mySelf() -> Self {
        return self
    }
}

现在一个类只需要像这样符合Animal

class Feline: Animal { }
class Cat: Feline { }
class Dog: Animal {}

并自动获取方法

Feline().mySelf() // Feline
Cat().mySelf() // Cat
Dog().mySelf() // Dog

更新

protocol ReadableInterval { }

class Interval: ReadableInterval { }

protocol ReadableEvent {
    associatedtype IntervalType: ReadableInterval
    func getInterval() -> IntervalType
}

class Event: ReadableEvent {
    typealias IntervalType = Interval
    func getInterval() -> Interval {
        return Interval()
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读