我可以在Swift中扩展最后一堂课吗?

时间:2015-11-05 08:21:04

标签: swift class-extensions final-class

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

示例:

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

我是否可以扩展类并为其添加一些新属性和方法而不会覆盖默认值?

像这样:

extension ExampleClass {
    // New Properties and Methods inside
}

4 个答案:

答案 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) 
  }
}