如何创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(){ } }