45

Question

What is the difference between import Swift and import Foundation?

Until I read this comment by Martin R, I didn't even know that there was an import Swift.

Reading

I couldn't find the documentation and doing a Google search didn't turn up much.

What I tried

Testing it out shows that import Swift does not give any compile errors, but that doesn't really answer my question.

If I were to guess, I would say that you import Swift for Swift projects and that you import Foundation for Objective-C projects or maybe for Swift projects that use Objective-C classes (like NSString).

Testing this in the Playground:

import Foundation
import Swift

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

Commenting out import Swift gives no errors and str is of String type. However, commenting out import Foundation gives an "undeclared type" error for NSString.

My question revisited

I would be happy enough to abandon Foundation and just use Swift. So am I right to just import Swift all the time unless I specifically need to use one of the old Objective-C classes?

Community
  • 1
  • 1
Suragch
  • 484,302
  • 314
  • 1,365
  • 1,393
  • 6
    Just use whatever your code requires. Like Martin said in his comment that you linked to, you can use the narrowest possible class for what you're doing in your code. So if `import UIKit` if you are using UIKit classes. Use `import Foundation` if using foundation classes but not UIKit. Use `import Swift` If you don't need any UIKit or foundation classes. – Rob Nov 26 '15 at 17:00
  • 4
    I think `import Swift` is always implicitly there, no need to type it out. – Kametrixom Nov 26 '15 at 20:51
  • @Rob _Use import Swift If you don't need any UIKit or foundation classes_ In playground or even in a normal file in a project if it's pure swift it just works without `import Swift`. So I'm wondering where it's actually needed... – mfaani Jul 20 '18 at 13:59

3 Answers3

37

Yes, you will only need import Foundation if you want to access NSObject or one of its subclasses. Foundation is the framework that brings in that class hierarchy. However, it's highly likely that in a project you'll need more than just import Swift. Like Rob commented, import UIKit is also a nice option.

In case you haven't read it already, Apple explains the Foundation framework here.

Sidney
  • 430
  • 5
  • 9
  • 4
    I've noticed that many of my ".swift" files build with no `import Swift` line, or any other `import` line, and yet they make use of `Array` and `Dictionary` etc. Would you have insight in to why this would be? I've asked [a question](https://stackoverflow.com/q/53477621/2547229) about it. Thanks! – Benjohn Nov 27 '18 at 15:11
17

If you want to work with Strings, Dates, etc you need to import Foundation.

The Foundation framework provides a base layer of functionality for apps and frameworks, including data storage and persistence, text processing, date and time calculations, sorting and filtering, and networking.

If you want to work with UITableViewController, UIAlertController you need to import UIKit.

If you import UIKit you do not need to import Foundation because it already imports it in the backstage.

The Swift standard library defines a base layer of functionality for writing Swift programs, including:

Fundamental data types, Common data structures, Global functions such as print(:separator:terminator:) and abs(:), Protocols, such as Collection and Equatable... etc

If you import Foundation, then no need to import Swift again as Foundation contains references to Swift Standard Library by default.

When you are writing something not for iOS Apps, like say a server programming based on Vapor , you may need to consider import Swift.

Refer:- https://developer.apple.com/documentation/swift/swift_standard_library/

Pleases refer:- https://hasancan.tech.blog/2018/01/17/import-foundation-vs-uikit/

arango_86
  • 4,236
  • 4
  • 40
  • 46
1

import Foundation used for access NSObject or one of its sub class.NSObject means we can extend our class using objective C runtime features.But import UIKit or import swift, that is automatically generate while we create our xcode project

kurupareshan
  • 123
  • 2
  • 8