1. ホーム
  2. swift

[解決済み] Swiftで汎用プロトコルを作成するには?

2023-03-22 06:42:07

質問

一般的な入力を受け取り、一般的な値を返すメソッドを持つプロトコルを作りたいのですが、どうすればよいでしょうか。

今まで試したのはこれですが、構文エラーが発生します。

未宣言の識別子Tを使用しています。

私は何を間違えているのでしょうか?

protocol ApiMapperProtocol {
    func MapFromSource(T) -> U
}

class UserMapper: NSObject, ApiMapperProtocol {
    func MapFromSource(data: NSDictionary) -> UserModel {
        var user = UserModel() as UserModel
        var accountsData:NSArray = data["Accounts"] as NSArray     
        return user
    } 
}

どのように解決するのですか?

プロトコルの場合は少し違います。 Associated Types"を見てください。 をご覧ください。 .

あなたの例ではこのように使います

protocol ApiMapperProtocol {
    associatedtype T
    associatedtype U
    func MapFromSource(_:T) -> U
}

class UserMapper: NSObject, ApiMapperProtocol {
    typealias T = NSDictionary
    typealias U = UserModel

    func MapFromSource(_ data:NSDictionary) -> UserModel {
        var user = UserModel()
        var accountsData:NSArray = data["Accounts"] as NSArray
        // For Swift 1.2, you need this line instead
        // var accountsData:NSArray = data["Accounts"] as! NSArray
        return user
    }
}