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

时间:2016-06-14 15:52:01

标签: swift swift-protocols

我想知道是否可以在Swift中完成类似java(或c ++)的事情:

我有一个协议:

protocol Prot1 {
   func returnMyself() -> Prot1
}

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

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

有可能吗?

2 个答案:

答案 0 :(得分:6)

只需在您的协议中使用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
    }
}

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

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()
    }
}

答案 1 :(得分:2)

protocol Prot1
{
    associatedtype T
    func returnMyself() -> T
}

class MyClass : Prot1
{
    typealias T = MyClass
    func returnMyself() -> T
    {
        return self
    }
}