My technology blog

什么是协议重复

protocol P1 {
    var name: String { get }
}

protocol P2 {
    var name: Int { get }
}

两个协议中都有相同的变量名name,但是他们属性不同,功能不同。

protocol P5 {
    func doSomething() -> Int
}

extension P5 {
    func doSomething() -> Int {
        return 1
    }
}

protocol P6 {
    func doSomething() -> Int
}

extension P6 {
    func doSomething() -> Int {
        return 2
    }
}

struct S56: P5, P6 {
    
}

这也是一种协议重复,S56不知道调用哪个doSomething

这些问题的原因在于协议目击者

折中的解决

protocol P3 {
    func doSomething() -> Int
}

protocol P4 {
    func doSomething() -> String
}

struct S34 {
    
}

extension S34: P3 {
    func doSomething() -> Int {
        return 111
    }
}

extension S34: P4 {
    func doSomething() -> String {
        return "111"
    }
}

可以通过函数的重载解决协议变量的重复问题,关于更多的解决方式还在讨论之中

You’ve successfully subscribed to UTS Blog
Welcome back! You’ve successfully signed in.
Great! You’ve successfully signed up.
Your link has expired
Success! Check your email for magic link to sign-in.