why is this causing so much trouble? (protocols and typealiases on their associated types)

后端 未结 2 1283
臣服心动
臣服心动 2021-01-21 17:00

I\'m trying to do something along the lines of this:

protocol Protocol {
    associatedtype T
    associatedtype ArrayT = Array
}

struct Struct

        
2条回答
  •  春和景丽
    2021-01-21 17:29

    When you "initialize" an associatedtype, you're not defining it. That's not the point of associated types in the first place. Associated types are deliberately unbound ("placeholders") until the adopting class resolves them all. All you're doing there is giving it a default value, which a conforming class is allowed to override. To extend your example:

    protocol Protocol {
        associatedtype T
        associatedtype ArrayT = Array
    
        func useSomeT(myFavoriteT: T)
    
        func useSomeArrayT(myLeastFavoriteArrayT: ArrayT)
    }
    
    class Whatever: Protocol {
        func useSomeT(myFavoriteT: Int) {
            print("My Favorite Int: \(myFavoriteT)")
        }
    
        func useSomeArrayT(myLeastFavoriteArrayT: [Int: String]) {
            print(myLeastFavoriteArrayT.map { $0.1 })
        }
    }
    
    struct Struct {
        func doSomething(stuff: ProtocolType.ArrayT) {
            print(type(of: stuff))
        }
    }
    
    let x = Struct()
    x.doSomething(stuff: [3: "Doggies"])
    

    For your example, it seems all you really want is to declare with: Array (or simply with: [ProtocolType.T]) as the parameter type.

提交回复
热议问题