1

我发现关联类型对我来说 Swift 有点复杂,尤其是因为我牢记 Java 方法。

我的问题是我想创建一个简单的接口(哦,对,协议),它看起来像这样:

protocol Sender {

    associatedtype Data

    func send(data: Data)
}

在 Java 中,它看起来像这样:

class Sender<T> {

     void send(T data);

}

现在我想将此协议用作方法参数,但我不知道如何在 Swift 中做到这一点,但在 Java 中它看起来像这样;)(以字符串类型为例)

void addSender(Sender<String> sender) {
      // do something
}

那么如何使用 Swift 实现这一点呢?

4

1 回答 1

3

你可以写类似

func addSender<T: Sender>(_ sender: T) where T.Data == String {

}

我不确定是否有更短的替代方案来完成这项工作。

s的Sender实现String可能如下所示:

class StringSender : Sender {
    //typealias Data = String      <- This can be inferred from the parameter type of send

    func send(data: String) {
        // Send a string
    }
}
于 2017-01-07T10:25:20.947 回答