import Swift vs import Foundation
Solution 1
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.
Solution 2
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/
Solution 3
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
Related videos on Youtube
Comments
-
Suragch almost 4 years
Question
What is the difference between
import Swift
andimport 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 andstr
is ofString
type. However, commenting outimport Foundation
gives an "undeclared type" error forNSString
.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?
-
Rob over 8 yearsJust 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. Useimport Foundation
if using foundation classes but not UIKit. Useimport Swift
If you don't need any UIKit or foundation classes. -
Kametrixom over 8 yearsI think
import Swift
is always implicitly there, no need to type it out. -
mfaani over 5 years@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...
-
-
Benjohn over 5 yearsI've noticed that many of my ".swift" files build with no
import Swift
line, or any otherimport
line, and yet they make use ofArray
andDictionary
etc. Would you have insight in to why this would be? I've asked a question about it. Thanks! -
arango_86 almost 5 yearsUpdated the answer with new comments based on my research.