Параметры чтения данных swift 4

Как правильно перевести эту строку кода Objective C на Swift 4?

NSData *mappedData =
  [NSData dataWithContentsOfURL:fileURL
                        options:NSDataReadingMappedAlways + NSDataReadingUncached
                          error:&error];

Я пробовал это, но он не компилируется:

 Data(contentsOf: fileUrl, options: Data.ReadingOptions.dataReadingMapped | Data.ReadingOptions.uncached)

«Я пробовал это, но он не компилируется:» И какую ошибку выдает XCode?

Larme 10.09.2018 11:32
1
1
4 199
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Ты можешь попробовать

do {

     // note it runs in current thread

    let data = try Data(contentsOf:fileURL, options: [.alwaysMapped , .uncached ] )

    print(data)

}
catch {

    print(error)
}

У меня не работает - исключение: «Не удалось открыть файл».

Pintu Rajput 03.09.2020 06:43

Попробуйте это и посмотрите

do {
    guard let fileURL = URL(string: "") else {
       return
    }
    let data = try Data(contentsOf: fileURL , options: Data.ReadingOptions(rawValue: Data.ReadingOptions.alwaysMapped.rawValue | Data.ReadingOptions.uncached.rawValue))
     print(data)
} catch {
    //print(error)
}

ты тоже = D ....

Sh_Khan 11.09.2018 10:35

Есть две проблемы с вашим кодом Swift.

Во-первых, options необходимо передать как элементы массива (без использования побитового оператора OR, как у вас - этот метод устарел несколько версий Swift назад):

[.dataReadingMapped, .uncached]

Во-вторых, этот инициализатор может вызвать исключение, поэтому вам необходимо это учитывать.

Это можно сделать двумя способами: внутри блока try-catch или через необязательную цепочку.

Если вам нужна возможность отлавливать конкретную ошибку и реагировать на нее, используйте блок try-catch:

do {
    let data = try? Data(contentsOf: fileURL, options: [.dataReadingMapped, .uncached])
    // Do something with data
} catch {
    print(error)
}

Если вы не заботитесь о восстановлении после определенных ошибок, вы можете использовать необязательную цепочку:

if let data = try? Data(contentsOf: fileURL, options: [.dataReadingMapped, .uncached]) {
    // Do something with data
} else {
    // It failed. Do something else.
}

Я бы порекомендовал книгу Apple Swift Programming Language, если вы заинтересованы в переходе с Objective-C на Swift:

https://itunes.apple.com/us/book/swift-programming-language/id881256329

Другие вопросы по теме