细微的协议差异

问题描述 投票:0回答:1

假设我们定义了一个协议

public protocol ScreenFlags {
    var cornerRadius: CGFloat { get }
}

现在我可以实现它了,例如:

struct ScreenFlagsImpl: ScreenFlags {
    var cornerRadius: CGFloat { return 0 }
}

struct ScreenFlagsImpl: ScreenFlags {
    let cornerRadius: CGFloat = 0
}

我很好奇这里的细微差别和可能的危险。如果cornerRadius永远不会改变,哪种实现会产生更小/更干净的代码,并且有没有办法强制cornerRadius是常量而不是变量

swift protocols
1个回答
0
投票

您有 2 个版本:

1.

struct ScreenFlagsImpl: ScreenFlags {
    var cornerRadius: CGFloat { return 0 }
}
struct ScreenFlagsImpl: ScreenFlags {
    let cornerRadius: CGFloat = 0
}

如果您的

cornerRadius
确实是一个常数,那么版本 2(带有
let
常数)是更好的选择。

另一方面,如果您的角半径对于所有

ScreenFlags
都是恒定的,那么最好添加协议的默认实现:

extension ScreenFlags {
    var cornerRadius: CGFloat { return 0 } // Or somethings else you need
}
© www.soinside.com 2019 - 2024. All rights reserved.