11

我正在为使用 Swift 制作的新应用程序使用第三方库。类/库的作者使用final关键字将其设为 final,可能是为了优化和防止覆盖其属性和方法。

例子:

final public class ExampleClass {
   // Properties and Methods here
}

我是否可以在不覆盖默认值的情况下扩展该类并向其添加一些新属性和方法?

像这样:

extension ExampleClass {
    // New Properties and Methods inside
}
4

4 回答 4

7

扩展可能不包含存储的属性,但您可以在其中添加方法。

于 2015-11-05T08:24:37.400 回答
5

扩展(如 Objective-C 类别)不允许存储属性。
方法和计算属性很好。

Objective-C 中的一个常见(但 IMO hacky)解决方法是使用关联对象来获得类别内的存储。如果你import ObjectiveC.
这个答案包含一些细节

于 2015-11-05T08:36:37.663 回答
2

是的,您可以扩展最终类。该扩展必须遵循扩展的通常规则,否则没什么特别的。

于 2019-07-24T01:41:29.510 回答
-1

虽然您不能在扩展中创建新的存储属性,但您可以添加方法计算属性

示例计算属性:

extension ExampleClass { 

  // computed properties do not have a setter, only get access
  var asInt: Int? { 
    Int(aStringPropertyOnTheClass) 
  }
}
于 2020-07-30T06:12:46.370 回答