I'm following a basic tutorial on building a simple iOS app in Swift.
It is written in Swift 2.x, and I work with XCode 8 Beta and Swift 3.
The tutorial suggests using NSFileManager
to find a data directory. Class names have changed, so the auto-fixed Swift 3 looks like this:
static let DocumentsDirectory = FileManager().urlsForDirectory(.documentDirectory, inDomains:.userDomainMask).first!
static let ArchiveURL = DocumentsDirectory.URLByAppendingPathComponent("meals")
However, Xcode now complains that
Value of type 'URL' has no member 'URLByAddingPathComponent'
I am unable to find out what the method is called now.
The NSURL Class Reference doesn't contain any hints as to how to address it from Swift 3
What is the new method name?
Where do I have to go to find a complete class reference for Swift 3 (or, the Swift 3 interface to the library the
URL
class is defined in - I still don't completely understand the nomenclature) so I can research these myself in the future?
It has now changed to
appendingPathComponent(_:)
and it throws, so you need to wrap it in do - catch blockUpdate
As per Xcode 8 beta 4, the
appendingpathcomponent(_:)
do not throw error.For relevant info see answer by @Hamish
=> Returns a new URL made by appending a path component to the original URL.
If it is directory:
=> Returns a new URL made by appending a path component to the original URL, along with a trailing slash if the component is designated a directory.
As of Xcode 8 beta 4, it is named
appendingPathComponent(_:)
, and does not throw.Also as Leo Dabus points out in the comments, your
documentsDirectory
property will need changing to useurls(for:in:)
in beta 4:(Note that I've made your property names
lowerCamelCase
, as per the Swift API design guidelines. I would also recommend usingFileManager.default
, rather than creating a new instance.)You can take a look at Apple's latest API reference guide to see the API naming changes that have taken place in Swift 3.