2016-08-07 32 views
25

Podążam za a basic tutorial po zbudowaniu prostej aplikacji na iOS w Swift.Co to jest odpowiednik Swift 3 NSURL.URLByAppendingPathComponent()?

To jest napisane w Swift 2.x, a ja pracuję z Xcode 8 Beta i Swift 3.

Tutorial proponuje zastosowanie NSFileManager znaleźć katalog danych. Nazwy klas uległy zmianie, więc auto utrwalonych Swift 3 wygląda następująco:

static let DocumentsDirectory = FileManager().urlsForDirectory(.documentDirectory, inDomains:.userDomainMask).first! 
static let ArchiveURL = DocumentsDirectory.URLByAppendingPathComponent("meals") 

Jednak Xcode teraz narzeka, że ​​

Value of type 'URL' has no member 'URLByAddingPathComponent' 

jestem w stanie dowiedzieć się, jaka metoda nazywa się teraz.

NSURL Class Reference nie zawiera żadnych wskazówek co do sposobu rozwiązania go z Swift 3

  • Co to nowa nazwa metoda?

  • Gdzie muszę znaleźć kompletne odniesienie do klasy dla Swift 3 (lub, interfejs Swift 3 do biblioteki definiuje klasę URL - nadal nie rozumiem całkowicie nomenklatury), więc mogę badać je sam w przyszłości?

+2

Wystarczy .appendingPathComponent ( –

+0

Spójrz na [nowego 'NSURL' odniesienia klasa] (https://developer.apple.com/reference/foundation/nsurl) - to teraz' appendingPathComponent (_ :) ' – Hamish

+0

@Hamish argh, więc szukałem niewłaściwego odnośnika do klasy.Dzięki! Przypuszczam, że mógłbym to skasować. (Edycja: ah, teraz jest odpowiedź: czy chcesz napisać samemu Hamish ?, w przeciwnym razie będę edytować odnośnik do odpowiedzi K.Nimo.) –

Odpowiedz

10

Obecnie zmienił się appendingPathComponent(_:) i rzuca, więc trzeba zawinąć go w do - blok catch

do { 
    let archiveURL = try documentsDirectory?.appendingPathComponent("meals") 
} catch { 
    print(error) 
} 

Aktualizacja

Zgodnie Xcode 8 beta 4, appendingpathcomponent(_:) nie wyrzucaj błędu.

Dla właściwej informacji można znaleźć odpowiedź przez @Hamish

39

Od Xcode 8 Beta 4, jest on nazwany appendingPathComponent(_:) i nie rzucać.

static let archiveURL = documentsDirectory.appendingPathComponent("meals") 

również jako Leo Dabus points out in the comments, nieruchomość documentsDirectory będzie trzeba użyć urls(for:in:) zmieniając w fazie beta. 4:

static let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] 

(Zauważ, że zrobiłem swoje nazwy właściwości lowerCamelCase, jak na Swift API design guidelines I Zaleca się także używanie numeru FileManager.default zamiast tworzenia nowej instancji.)

Można spojrzeć na Apple's latest API reference guide aby zobaczyć zmiany API nazewnictwa, które miały miejsce w Swift 3.

4
func appendingPathComponent(String) 

=> Zwraca nowy URL wykonany przez dodanie składnika ścieżki do pierwotnego adresu URL.

static let archiveURL = documentsDirectory?.appendingPathComponent("meals") 

Jeśli jest to katalog:

func appendingPathComponent(String, isDirectory: Bool) 

=> Zwraca nowy URL wykonany przez dodanie składnika ścieżki do pierwotnego adresu URL wraz z ukośnikiem czy komponent jest wyznaczony katalog.

static let archiveURL = documentsDirectory?.appendingPathComponent("meals", isDirectory: true) 
Powiązane problemy