2015-08-31 3 views
1

Я использую WKUserScript для связи между UIWebView и сервером. Этот конкретный код позволит пользователю искать географические места. Я получаю сообщение обратно только штрафом в функцииSwift Невозможно преобразовать NSString в JSON

func userContentController(userContentController: WKUserContentController, 
    didReceiveScriptMessage message: WKScriptMessage) 

Переменная message имеет AnyObject тело. Это значение, которое я хочу преобразовать в JSONObject, поэтому я могу получить доступ к его содержимому. Вот message.body:

{ 
    "status":"OK", 
    "predictions":[ 
     { 
      "description":"Dallas, TX, United States", 
      "id":"fa589a36153613fc17b0ebaebbea7c1e31ca62f0", 
      "matched_substrings":[{"length":6,"offset":0}], 
      "place_id":"ChIJS5dFe_cZTIYRj2dH9qSb7Lk", 
      "reference":"CkQxAAAAJNbPZRkdsyxuKT4FzFmgpBx9HWnZLNhxprRQB0zy62sHCXo3tkHfV_M5dK4Cabp2KL43nIKAAyrv_RI4qbvNfRIQ1dzEGuqywMIAlNg_1AKvoRoUQN32C2uNo4KzZ9j58lB-wjPpjJw", 
      "terms":[ 
       {"offset":0,"value":"Dallas"}, 
       {"offset":8,"value":"TX"}, 
       {"offset":12,"value":"United States"} 
      ], 
     "types":["locality","political","geocode"]}, 
     { 
      "description":"Dallas Athletic Club Drive, Dallas, TX, United States", 
      "id":"37c4f8d416b9d3975ad57662eb022a0d410e8f76", 
      "matched_substrings":[{"length":6,"offset":0}], 
      "place_id":"EjVEYWxsYXMgQXRobGV0aWMgQ2x1YiBEcml2ZSwgRGFsbGFzLCBUWCwgVW5pdGVkIFN0YXRlcw", 
      "reference":"CkQ5AAAArHSWkIVO6uTH4qE6LxRHshWAfgSnMfxXiBxqf_ZO3O-xQ8RIKKHA9QT7LKwf6Ic788Bzy_I2FpemvcQhE6o5ZRIQ5td4XsjIiyX6D6_dgI3YIxoURu_oROPuOguuorK3Tw11veN7XJI", 
      "terms":[ 
       {"offset":0,"value":"Dallas Athletic Club Drive"}, 
       {"offset":28,"value":"Dallas"}, 
       {"offset":36,"value":"TX"}, 
       {"offset":40,"value":"United States"} 
      ], 
      "types":["route","geocode"] 
     } 
    ] 
} 

JSONObject имеет статус, который позволяет мне знать, если результаты справедливы или, если произошла ошибка. Я использую SwiftyJSON для создания и доступа к моим JSON. Я создаю JSONObject:

let json = JSON(message.body as! NSString) 

и я пытаюсь получить доступ к ключу состояния, как:

if let status = json["status"].string { 
    print("status: \(status)") 
} 

Но я не в состоянии достигнуть о печати. Я заметил, что NSDictionary и JSON имеют новые строковые символы, когда вы распечатываете их на консоль, но я не думал, что это изменит ситуацию. Кто-нибудь знает, почему я не могу получить переменную статуса из JSON?

ответ

1

Вы не можете инициализировать объект SwiftyJSON непосредственно со строкой, вам нужно преобразовать эту строку в данные (или использовать данные, которые вы получили в первую очередь, если это так).

Предполагая message.body является строка:

if let dataFromString = message.body.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) { 
    let json = JSON(data: dataFromString) 
    if let status = json["status"].string { 
     print("status: \(status)") 
    } 
} 
+0

Спасибо. Я не знаю, почему я думал, что ты сможешь это сделать. –

+0

Добро пожаловать. – Moritz

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