Следующий код бросает сообщение, которое говорит„инициализатор для условной привязки должны иметь факультативный тип, а не „AnyObject““Initializer для условной привязки должны иметь факультативный тип, а не «AnyObject - подход
func parseData2(){
var data:NSData?
if let data2 = data {
do {
let details = try NSJSONSerialization.JSONObjectWithData(data2, options: .AllowFragments)
if let actualDetails = details where actualDetails.isKindOfClass(NSDictionary) {
print("Parse Data")
}
}catch {
print("Error \(error)")
}
}
}
Для устранения выше ошибки Я использовал следующий код.
func parseData2(){
var data:NSData?
if let data2 = data {
do {
let details:AnyObject = try NSJSONSerialization.JSONObjectWithData(data2, options: .AllowFragments)
if let actualDetails:AnyObject = details where actualDetails.isKindOfClass(NSDictionary) {
print("Parse Data")
}
}catch {
print("Error \(error)")
}
}
}
Есть ли какой-нибудь лучший подход, чем выше, или мой код может упасть?
Существует еще один код, который я хочу добавить, учитывая ноль проверить, тип проверки, а затемтип проверки литых. Причина в том, что Swift предлагает большую гибкость, но немного легче решить проблемы. Предположим, у меня есть словарь, cityDetails, и я пытаюсь получить данные для self.cityZipCode и self.cityIdentifier, которые являются необязательными, как var cityZipCode: Int? и var cityIdentifier: Int?
if let cityBasic = cityDetails["basicDetails"] where
cityBasic!.isKindOfClass(NSDictionary) {
self.cityZipCode = (cityBasic as! NSDictionary)["zip"].integerValue ?? 0
self.cityIdentifier = (cityBasic as! NSDictionary)["cityId"].integerValue ?? 0
}
Я не понимаю, что вы спрашиваете в обновлении своего вопроса? Либо уточните, как это относится к первой части, либо задайте новый вопрос для новой части. В настоящий момент ваш заголовок ссылается на проблему «Необязательный Binding», ваша первая часть посвящена 'do try catch', и теперь речь идет о' down casting' и 'nil coalescing operator' –
. Я немного путаюсь с nil check, type check и затем опускание, как все это работает вместе? Простой код, но для этого требуется большое понимание. – andyPaul
[is and as] (http://www.codingexplorer.com/type-casting-swift/), [необязательное связывание] (http://www.codingexplorer.com/multiple-optional-bindings-swift-1- 2 /), [do try catch] (https://www.hackingwithswift.com/new-syntax-swift-2-error-handling-try-catch). Google - ваш друг для общих языковых вопросов. Особенно, когда речь идет о наиболее написано о материалах –