Xcode6 中的 Swift 类与 Cocoa Touch 类

Posted

技术标签:

【中文标题】Xcode6 中的 Swift 类与 Cocoa Touch 类【英文标题】:Swift class vs Cocoa Touch Class in Xcode6 【发布时间】:2014-09-21 16:22:46 【问题描述】:

我是 ios 开发新手,直接开始使用 Swift。

当我想向项目中添加新文件时,IDE 会为我提供两个文件,这两个文件似乎在我目前看到的教程中可以互换使用。 它们是“Cocoa Touch Class”和“Swift Class”。

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

import UIKit

class CtTest: NSObject 


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

import Foundation

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

如果我将类定义添加到 Swift 文件并修改如下:-

import UIKit
import Foundation

class SwTest:NSObject


这两个文件之间是否存在任何差异。

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

谢谢

【问题讨论】:

Foundation是定义NSObject、NSString、NSArray等所有objective-C基础类的框架。另一方面,UIKit 定义视图、视图控制器、控件(例如 UIButton)等。通常,您为模型类(数据)导入 Foundation,为视图/控制器类(表示、逻辑)导入 UIKit。 附录:Foundation 是 iOS 和 OSX 通用的。 UIKit 仅适用于 iOS。 感谢尼古拉斯的回答。为什么 Cocoa Touch 类会导入 Foundation 而 Swift 类会导入 UIKit 是有道理的。那么我是否应该更喜欢视图控制器的 Swift 类和模型的 Cocoa Touch 类(尽管我很可能使用 Swift 数据类型,如 String、Int、Dictionary 等,而不是 Foundation 数据类型,如 NSNumber、NSString 和 NSDictionary,这使得 Foundation 有点多余) . 我自己还没有使用过 swift,但请查看@drewag 下面的答案;它写得很好,很完整。 确实如此。当您需要默认添加一些方法时,我还发现 Cocoa Touch 类更有用(正如我在对他的回答的评论中提到的那样)。再次感谢您的投入! 【参考方案1】:

除了默认放入文件的代码外,这两个不同的模板没有区别。正如您所注意到的,它们都具有相同的扩展名,并且都是纯文本文件——编译器不会对它们有任何不同的处理。

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

基础

Foundation 基本上是 Apple 开发标准库,用 Objective-C 实现。它包括 NSArray、NSString 和 NSDictionary 等数据类型。然而,Swift 提供了这些数据类型的替代品:Array、String 和 Dictionary。您应该只需要在尝试与 Objective-C API 交互的文件中使用import Foundation。然而,由于所有现有的 API 都是用 Objective-C 编写的(因为 Swift 是如此新),除了基本的领域对象之外,您几乎必须在所有文件中导入 Foundation。

UIKit

UIKit 实际上包含 Foundation。如果你导入 UIKit,你不需要同时导入 Foundation。 UIKit 是一组特定于 iOS 界面的标准 API。它包括像 UITableView 这样的视图和像 UIViewController 这样的控制器。每当在 iOS 应用程序的 UI 上工作时,您都需要导入它。

Cocoa 触控类

此模板对于从 UIKit 子类化类以及可能让 Xcode 为您生成界面构建器文件很有用。如果你不需要这些东西,你应该只使用 Swift Class 模板。仅当您确实需要时才让您的对象从 NSObject 继承(如果您需要能够使用来自 Objective-C 的 Swift 类)。如果你不从 NSObject 继承,编译器可以进行额外的优化,它可以避免 Objective-C 运行时的一些较慢的部分。

【讨论】:

感谢drawag 的精彩回答。我刚刚尝试创建两个需要继承 UITableViewController 的示例类(一个 Swift 和一个 Cocoa Touch)。果然,我必须为 Swift 类做所有繁重的工作,但 Cocoa Touch 类为我添加了所有必需的方法。再次感谢!

以上是关于Xcode6 中的 Swift 类与 Cocoa Touch 类的主要内容,如果未能解决你的问题,请参考以下文章

保护文档架构中的模型(Cocoa/Swift)

Swift 之Protocol在cocoa中的使用范例搜集

如何使用 Swift 为 Cocoa 应用程序中的 NSLider 值更改设置动画

如何将NSNib.Name传递给Swift / Cocoa中的窗口控制器

如何使用 Swift 播放本地视频?

Xcode 5 安装 Xcode 6 beta 2 后无法构建模块 Cocoa