Xcode6中的Swift类别与Cocoa Touch类别

我是iOS开发的新手,并直接从Swift开始。

[当我想向项目中添加新文件时,IDE向我提供了两个文件,这些文件似乎可以在到目前为止的教程中互换使用。它们是“可可接触课堂”和“快速课堂”。

当我创建一个新的Cocoa Touch Class时,这就是我所得到的(取决于继承的类)

import UIKit

class CtTest: NSObject {

}

并且当我创建一个新的Swift文件时,我得到了:-

import Foundation

这两个类的扩展名都是.swift

如果我将类定义添加到Swift文件并按如下所示进行修改:-

import UIKit
import Foundation

class SwTest:NSObject
{
}

两个文件之间是否还有任何区别。

如果是这样,则在哪些情况下首选哪种类,例如。查看控制器,模型等。

谢谢

82
投票

两个不同的模板之间没有什么区别,除了默认情况下它们放入文件中的代码不同。正如您所注意到的,它们都具有相同的扩展名,并且它们都是纯文本文件–编译器不会对它们进行任何不同的处理。

一般经验法则是,仅在该文件中需要该模块时才导入该模块–否则,基本上会出现编译错误。如果尝试使用导入中的类型,则会由于缺少导入而导致编译器错误。

基金会

Foundation基本上是在Objective-C中实现的Apple开发标准库。它包括数据类型,如NSArray,NSString和NSDictionary。但是,Swift提供了以下数据类型的替换:数组,字符串和字典。您只需要在试图与Objective-C API进行交互的文件中单击import Foundation。但是,由于所有现有的API都是用Objective-C编写的(因为Swift太新了),因此您必须将Foundation导入几乎所有文件中,基本域对象除外。

UIKit

UIKit实际上包括Foundation。如果导入UIKit,则不需要也导入Foundation。 UIKit是特定于iOS界面的标准API的集合。它包括UITableView之类的视图和UIViewController之类的控制器。每当在iOS应用的用户界面上工作时,您都需要导入此文件。

可可接触类

此模板对于从UIKit继承类很有用,并可能使Xcode为您生成接口构建器文件。如果您不需要这些东西,则应该使用Swift Class模板。仅在确实需要时才让对象继承自NSObject(如果您需要能够使用Objective-C的Swift类)。如果您不从NSObject继承,则编译器可以进行其他优化,从而避免了Objective-C运行时的某些较慢部分。