假设我们定义了一个协议
public protocol ScreenFlags {
var cornerRadius: CGFloat { get }
}
现在我可以实现它了,例如:
struct ScreenFlagsImpl: ScreenFlags {
var cornerRadius: CGFloat { return 0 }
}
或
struct ScreenFlagsImpl: ScreenFlags {
let cornerRadius: CGFloat = 0
}
我很好奇这里的细微差别和可能的危险。如果cornerRadius永远不会改变,哪种实现会产生更小/更干净的代码,并且有没有办法强制cornerRadius是常量而不是变量
您有 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
}