【发布时间】:2014-07-31 07:47:16
【问题描述】:
我想创建现有 swift 类的类别,但 IDE 中没有这样做的选项。
知道 swift 项目中是否存在类别吗?或者如何在 swift 项目中实现类似的功能?
【问题讨论】:
-
它叫
extension。
我想创建现有 swift 类的类别,但 IDE 中没有这样做的选项。
知道 swift 项目中是否存在类别吗?或者如何在 swift 项目中实现类似的功能?
【问题讨论】:
extension。
在 Swift 中它被称为 Extensions ! Check it out
【讨论】:
extensions 不能包含变量,这会使事情完全不同。
在 Swift 中,您可以使用 Extensions 为现有的类、结构和枚举类型添加新功能。
它们在几个方面与 Objective-C 类别不同,主要是:
就目前而言,扩展程序可以:
声明扩展的基本语法如下:
extension SomeType {
// new functionality to add to SomeType goes here
}
查看Apple's documentation 了解有关如何在 Swift 中使用扩展的更多信息。
【讨论】:
在 Objective C 中它们被称为categories,但在 Swift 中它们被称为extensions。它们的目的都是为现有类提供额外的功能,而无需创建子类。
我在文档中阅读了有关扩展的信息,但直到看到this tutorial video(YouTube version,github source),我才真正了解如何在我的项目中使用扩展。
这是从视频中摘录的摘要。
右键单击项目导航器并选择“新建文件...”
选择“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
}
}
完整示例请参见here。
现在您可以在代码中的任何位置对该类使用新方法,就像它是标准类的一部分一样。
这是视频的示例 (on 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 name{
func funcName(){
}
}
【讨论】: