微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我想知道是否可以在 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()
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐