我想为我的现有 Swift 类创建一个类别,但是 IDE 中没有此选项。
有没有关于在 Swift 项目中使用类别的建议?或者如何在 Swift 项目中实现类似的功能?
我想为我的现有 Swift 类创建一个类别,但是 IDE 中没有此选项。
有没有关于在 Swift 项目中使用类别的建议?或者如何在 Swift 项目中实现类似的功能?
在Swift中,您可以使用扩展
向现有的类、结构体和枚举类型添加新功能。
它们与Objective-C的分类不同,主要表现在:
截至今天,扩展可以:
声明扩展的基本语法如下:
extension SomeType {
// new functionality to add to SomeType goes here
}
查看Apple的文档了解如何在Swift中使用扩展。
在项目导航器中右键并选择“新建文件…”
选择“Swift文件”
惯例是将文件名保存为您正在扩展的类名加上(带有“+”符号)您正在对其进行的操作。例如,“UIImage+Cropping”。
打开您刚刚创建的新的Swift文件。
如果您正在扩展UIView
,则应导入UIKit
(而不是Foundation
)。然后在要扩展的类名之前使用extension
关键字。然后,您可以向该类添加自己的新方法。(请注意,扩展是用于添加新方法而不是覆盖现有方法--因此得名。)
在视频中,示例是添加一个将图像裁剪为圆形并给它加边框的方法。
import UIKit
extension UIImage {
func cropToCircleWithBorderColor(color: UIColor, lineWidth: CGFloat) -> UIImage {
// code to create the cropped circle with colored border
return newImage
}
}
请参阅此处以获取完整示例。
现在,您可以在代码中的任何位置使用您的新方法,就像它是标准类的一部分一样。
这里是视频的示例(在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
的标准部分,但是你可以看到,它的使用方式就像是标准部分一样。
extension
不能包含变量,这使得事情完全不同。 - RnMssextension name{
func funcName(){
}
}