【问题标题】:import Swift vs import Foundation导入 Swift 与导入 Foundation
【发布时间】:2016-02-29 20:02:21
【问题描述】:

问题

import Swiftimport Foundation 有什么区别?

在我读到Martin Rthis comment 之前,我什至不知道有一个import Swift

阅读

我找不到文档,谷歌搜索也没有出现太多。

我尝试了什么

测试表明import Swift 没有给出任何编译错误,但这并不能真正回答我的问题。

如果我猜的话,我会说你为 Swift 项目导入了 Swift,你为 Objective-C 项目或者可能为使用 Objective-C 类的 Swift 项目导入了 Foundation(比如 NSString)。

在 Playground 中测试:

import Foundation
import Swift

var str = "Hello, playground"
let str2: NSString = "hello"
let str3: String = "hello"

注释掉import Swift 没有错误,str 属于String 类型。但是,注释掉 import Foundation 会给 NSString 一个“未声明类型”错误。

我的问题重温了

我会很高兴放弃 Foundation 而只使用 Swift。那么,除非我特别需要使用旧的 Objective-C 类之一,否则我是否一直只导入 Swift?

【问题讨论】:

  • 只需使用您的代码所需的任何内容。就像 Martin 在您链接到的评论中所说的那样,您可以使用最窄的类来处理您在代码中所做的事情。所以如果import UIKit 如果你正在使用 UIKit 类。如果使用基础类而不是 UIKit,请使用 import Foundation。如果您不需要任何 UIKit 或基础类,请使用 import Swift
  • 我认为import Swift 总是隐含地存在,无需输入。
  • @Rob 如果您不需要任何 UIKit 或基础类,请使用 import Swift 在操场上,甚至在项目中的普通文件中,如果它是纯粹的 swift 它就可以在没有import Swift。所以我想知道它实际上在哪里需要......

标签: ios objective-c swift import foundation


【解决方案1】:

是的,如果你想访问 NSObject 或其子类之一,你只需要import Foundation。 Foundation 是引入该类层次结构的框架。但是,很可能在一个项目中您需要的不仅仅是import Swift。就像 Rob 评论的那样,import UIKit 也是一个不错的选择。

如果您还没有阅读过,Apple 解释了 Foundation 框架 here

【讨论】:

  • 我注意到我的许多“.swift”文件在构建时没有import Swift 行或任何其他import 行,但它们使用了ArrayDictionary等等。您能了解为什么会这样吗?我已经问过a question。谢谢!
【解决方案2】:

如果你想使用字符串、日期等,你需要导入 Foundation。

Foundation 框架为应用程序和框架提供了基础功能层,包括数据存储和持久性、文本处理、日期和时间计算、排序和过滤以及网络。

如果你想使用 UITableViewController,UIAlertController 你需要导入 UIKit。

如果你导入 UIKit 就不需要导入 Foundation,因为它已经在后台导入了。

Swift 标准库定义了用于编写 Swift 程序的基本功能层,包括:

基本数据类型、常用数据结构、全局函数如 print(:separator:terminator:) 和 abs(:)、协议如 Collection 和 Equatable...等

如果您导入 Foundation,则无需再次导入 Swift,因为 Foundation 默认包含对 Swift 标准库的引用。

当您编写非 iOS 应用程序时,例如基于 Vapor 的服务器编程,您可能需要考虑导入 Swift。

参考:- https://developer.apple.com/documentation/swift/swift_standard_library/

请参考:- https://hasancan.tech.blog/2018/01/17/import-foundation-vs-uikit/

【讨论】:

  • 根据我的研究用新的 cmets 更新了答案。
【解决方案3】:

import Foundation 用于访问 NSObject 或其子类之一。NSObject 意味着我们可以使用 objective C 运行时特性扩展我们的类。但是导入 UIKit 或导入 swift,这是在我们创建 xcode 项目时自动生成的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-19
    • 2023-02-15
    • 2013-06-03
    • 2016-05-15
    • 1970-01-01
    相关资源
    最近更新 更多