2015-09-19 2 views
1

Я новичок в разработке Swift. Я просто превращенный существующий рабочий код swift2 при обновлении Xcode 7 из 6.Swift2: Невозможно вызвать инициализатор для типа 'NSString'

var err: NSError? 
let template = NSString(contentsOfFile: path!, encoding: NSUTF8StringEncoding, error: &err) as! String 
let iframe = template.stringByReplacingOccurrencesOfString("{{VIDEO_ID}}", withString: id, options: NSStringCompareOptions.allZeros, range: nil) 
if err != nil { 
     return false 
} 

Затем я получил сообщение об ошибке:

Cannot invoke initializer for type 'NSString' with an argument list of type '(contentsOfFile: String, encoding: UInt, error: inout NSError?)' 

У вас есть какие-либо идеи? Большое спасибо!

ответ

3

Вы должны использовать строку типа Swift. Также вам нужно реализовать Swift 2.0, чтобы попытаться обработать ошибку. Попробуйте так:

let template = try! String(contentsOfFile: path!, encoding: NSUTF8StringEncoding) 
let iframe = template.stringByReplacingOccurrencesOfString("{{VIDEO_ID}}", withString: id, options: [], range: nil) 

Если вы хотите обработать ошибку:

do { 
    let template = try String(contentsOfFile: path!, encoding: NSUTF8StringEncoding) 
    let iframe = template.stringByReplacingOccurrencesOfString("{{VIDEO_ID}}", withString: id, options: [], range: nil) 
} catch let error as NSError { 
    print(error.localizedDescription) 
} 
+1

Спасибо! Я узнал от вас! – user1437787

+0

@ user1437787 добро пожаловать –

+0

Я еще не много сделал с Swift 2.0. Можете ли вы рассказать о своем ответе, чтобы объяснить, как параметр ошибки метода String (contentOfFile: encoding: error:) 'выпадает из вызова и передается в catch? Документы по-прежнему отображают только форму инициализатора с включенным параметром ошибки. –

0

Вы должны использовать Swift 2-х "do-try-catch" syntax для обработки ошибки:

do { 
    let template = try String(contentsOfFile: path!, encoding: NSUTF8StringEncoding) 
    // Use the template 
} catch let error as NSError { 
    // Handle the error 
} 

Определенно читать документы на этом, поскольку он показывает несколько других способов обработки ошибок - например, try? предоставит вам опцию в случае любой ошибки, и try! будет (хотя вы получите ошибку времени выполнения, если произошла ошибка ).

+0

Спасибо. Я изучаю Swift2 от понимания существующих кодов. Итак, это займет некоторое время. Еще раз спасибо за ваше ценное предложение. – user1437787

Смежные вопросы