如何在协议内声明泛型函数

时间:2017-06-30 00:10:02

标签: ios swift function protocols generic-programming

这是我的代码

protocol sharedFunction {

      func transformDictionary<Element>(postDictionary:[Element:Element], key: Element) -> Element


}


class newUser: sharedFunction {

var email:String?
var username:String?
var uid: String?

func transformDictionary(postDictionary: [String : Any], key: String) -> newUser {

 }
}

但我继续收到此错误“Type newUser”不符合协议“”sharedFunction“

2 个答案:

答案 0 :(得分:1)

将协议声明更改为

protocol sharedFunction {

      func transformDictionary<Element>(postDictionary:[Element: Any], key: Element) -> Any

}

您没有在课堂上遵循您的协议声明。这就是错误的原因。

答案 1 :(得分:1)

发生错误只是因为您的类型不符合协议,因为消息明确指出。我会像这样重写你的代码:

protocol SharedFunction {
    associatedtype Element: Hashable
    func transformDictionary(postDictionary: [Element:Element], key: Element) -> Element
}

class NewUser: SharedFunction {

    typealias Element = Int

    var email: String?
    var username: String?
    var uid: String?

    func transformDictionary(postDictionary: [Element : Element], key: Element) -> Element {
        return 1
    }

}

我没有想法这个代码的上下文是什么,所以我不知道我的代码是否对你有意义,但我认为你有了这个想法。