我想为现有的 swift 类创建类别,但 IDE 中没有这样做的选项。
知道 swift 项目中是否存在类别吗?或者如何在 swift 项目中实现类似的功能?
我想为现有的 swift 类创建类别,但 IDE 中没有这样做的选项。
知道 swift 项目中是否存在类别吗?或者如何在 swift 项目中实现类似的功能?
在 Swift 中,您可以使用Extensions
向现有类、结构和枚举类型添加新功能。
它们在几个方面与 Objective-C 类别不同,主要是:
就目前而言,扩展程序可以:
声明扩展的基本语法如下:
extension SomeType {
// new functionality to add to SomeType goes here
}
有关如何在 Swift 中使用 Extensions 的更多信息,请查看Apple 的文档。
在 Objective C 中它们被称为类别,但在 Swift 中它们被称为扩展。它们的目的都是为现有类提供额外的功能,而无需创建子类。
我在文档中阅读了有关扩展的信息,但直到我观看了本教程视频(YouTube 版本,github 源),我才真正了解如何在我的项目中使用扩展。
这是从视频中摘录的关于如何做到这一点的摘要。
右键单击项目导航器并选择“新建文件...”
选择“快速文件”
约定是将文件名保存为您正在扩展的类名加上(带有“+”号)您正在对其执行的操作。例如,“UIImage+裁剪”。
打开刚刚创建的新 Swift 文件。
如果您要UIKit
扩展. 然后在要扩展的类名之前使用关键字。然后,您可以将自己的新方法添加到类中。(注意,扩展用于添加新方法,而不是覆盖现有方法——因此得名。)Foundation
UIView
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
,但正如您所见,它的使用方式与以前一样。
在 Swift 中,它被称为Extensions! 一探究竟
您可以在现有课程中使用以下代码
extension name{
func funcName(){
}
}