如何创build类别快速的类?

我想要创build我现有的swift类的类别,但在IDE中没有这样做的选项。

任何想法,如果类别存在于swift项目? 或者如何在swift项目中实现类似的function?

在Swift中,你可以使用Extensions为现有的类,结构和枚举types添加新的function。

它们与Objective-C类别在几个方面有所不同,主要是:

  • 他们没有被命名
  • 您不需要显式导入扩展名。 如果您定义了一个扩展来为现有types添加新function,则新function将在所有现有types的实例上可用,即使它们是在定义扩展之前创build的。
  • 如上所述,他们不仅与class级合作,而且还与其他types合作。

如今,扩展可以:

  • 添加计算的属性和计算的静态属性
  • 定义实例方法和types方法
  • 提供新的初始化程序
  • 定义下标
  • 定义和使用新的嵌套types
  • 使现有types符合协议

声明扩展的基本语法如下所示:

 extension SomeType { // new functionality to add to SomeType goes here } 

检查苹果的文档 ,了解如何在Swift中使用扩展的更多信息。

在Objective C中,它们被称为类别 ,但在Swift中它们被称为扩展 。 它们的目的是为现有的类提供额外的function,而不必创build子类。

我已经阅读了文档中的扩展,但直到我看了这个教程video ( YouTube版本 , github源代码 )之前,我才真正理解如何在我的项目中使用它。

这里是从video如何做到这一点总结。

将Swift文件添加到您的项目

  • 右键单击Project Navigator并select“New File …”(新build文件…)

  • select“Swift文件”

  • 约定是将文件名保存为你正在扩展的类名加上(带“+”号)你正在做什么。 例如,“UIImage + Cropping”。

编写扩展的代码

打开刚刚创build的新Swift文件。

如果要扩展UIView则应该导入UIKit (而不是Foundation )。 然后在要extension的类名之前使用extension关键字。 然后,您可以将自己的新方法添加到课程中。 (请注意,扩展名是用于添加新的方法,而不是覆盖现有的方法 – 因此名称。)

在video中,该示例是添加一个方法,从图像中裁剪出一个圆,并给它一个边界。

 import UIKit extension UIImage { func cropToCircleWithBorderColor(color: UIColor, lineWidth: CGFloat) -> UIImage { // code to create the cropped circle with colored border return newImage } } 

在这里看到完整的例子。

在您项目的任何地方使用您的扩展

现在你可以在代码中的任何地方使用你的新方法,就像它是标准类的一部分一样。

这里是video的例子( 在github上 ):

 import UIKit class ViewController: UIViewController { @IBOutlet var imageView : UIImageView = nil override func viewDidLoad() { super.viewDidLoad() let img = imageView.image imageView.image = img.cropToCircleWithBorderColor(UIColor(red:0.91, green:0.34, blue:0.16, alpha:1.00), lineWidth: 20) } } 

cropToCircleWithBorderColor方法不是UIImage的标准部分,但正如您所看到的,它的使用就像它一样。

进一步研究:

  • 我做了三个常见扩展的例子
  • 文档

在Swift中,它被称为扩展 ! 一探究竟

您可以在现有课程中使用以下代码

 extension name{ func funcName(){ } }