如何为类别创建swift类?

Kha*_*war 84 swift swift-extensions

我想创建现有swift类的类别,但IDE中没有选项可以这样做.

知道swift项目中是否存在类别?或者如何在swift项目中实现类似的功能?

Cez*_*zar 126

在Swift中,您可以使用Extensions向现有类,结构和枚举类型添加新功能.

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

  • 它们没有命名
  • 您无需显式导入扩展.如果定义扩展以向现有类型添加新功能,则新功能将在该类型的所有现有实例上可用,即使它们是在定义扩展之前创建的.
  • 如上所述,它们不仅适用于类,也适用于其他类型.

就目前而言,Extensions可以:

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

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

extension SomeType {
    // new functionality to add to SomeType goes here
}
Run Code Online (Sandbox Code Playgroud)

有关如何在Swift中使用Extensions的更多信息,请查看Apple的文档.


Sur*_*gch 99

在Objective C中,它们被称为类别,但在Swift中它们被称为扩展.它们的目的是为现有类提供附加功能,而无需创建子类.

我已经阅读了文档中的扩展,但在我观看本教程视频(YouTube版本,github源代码)之前,我并不真正理解如何在我的项目中使用它.

以下是有关如何操作的视频摘要.

将Swift文件添加到项目中

  • 右键单击Project Navigator并选择"New File ..."

  • 选择"Swift文件"

  • 惯例是将文件名保存为您正在扩展的类名(加上"+"符号),以便对其进行操作.例如,"UIImage + Cropping".

编写扩展的代码

打开刚刚创建的新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
    }
}
Run Code Online (Sandbox Code Playgroud)

请参阅此处以获取完整示例.

在项目的任何位置使用扩展程序

现在,您可以在代码中的任何位置使用新方法,就像它是标准类的一部分一样.

这是视频的例子(在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)
    }
}
Run Code Online (Sandbox Code Playgroud)

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

进一步研究:


iSo*_*Tom 8

在Swift中,它被称为Extensions! 看看这个