如何为类别创建swift类?

时间:2014-06-10 13:52:10

标签: swift swift-extensions

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

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

4 个答案:

答案 0 :(得分:125)

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

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

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

现在,Extensions可以:

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

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

extension SomeType {
    // new functionality to add to SomeType goes here
}

检查Apple's documentation以获取有关如何在Swift中使用扩展程序的更多信息。

答案 1 :(得分:99)

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

我已经阅读了文档中的扩展程序,但在我看到this tutorial videoYouTube versiongithub source)之前,我并不真正了解如何在项目中使用扩展程序。

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

将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
    }
}

有关完整示例,请参阅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的标准部分,但正如您所看到的,它的使用方式就像它一样。

进一步研究:

答案 2 :(得分:8)

在Swift中,它被称为扩展Check it out

答案 3 :(得分:0)

您可以在现有班级中使用以下代码

extension name{
func funcName(){
   } 
}