我正在使用第三方库来创建一个使用Swift创建的新应用程序。类/库的作者使用final
关键字使其最终,可能是为了优化和防止覆盖其属性和方法。
示例:
final public class ExampleClass {
// Properties and Methods here
}
我是否可以扩展类并为其添加一些新属性和方法而不会覆盖默认值?
像这样:
extension ExampleClass {
// New Properties and Methods inside
}
答案 0 :(得分:7)
扩展程序可能不包含存储的属性,但您可以在其中添加方法。
答案 1 :(得分:5)
扩展(如Objective-C类别)不允许存储属性 方法和计算属性很好。
Objective-C中常见的(但IMO hacky)解决方法是使用associated objects来获取类别中的存储空间。如果你import ObjectiveC
,这也适用于Swift
这个答案包含some details。
答案 2 :(得分:0)
是的,您可以扩展最后的课程。 该扩展名必须遵循扩展名的常规规则,否则没什么特别的。
答案 3 :(得分:-1)
虽然无法在扩展名中创建新的存储属性,但是可以添加方法和计算属性。
计算属性示例:
extension ExampleClass {
// computed properties do not have a setter, only get access
var asInt: Int? {
Int(aStringPropertyOnTheClass)
}
}