[英]How to convert string containing array to array in Swift?
我在Swift中有一個字符串,其中包含一個數組。 是否可以將字符串轉換為數組? 我在互聯網上找到的所有內容都將"abc"
轉換為["a","b","c"]
,我不想這樣做。
字符串: "[\\"value1\\",\\"value2\\",\\"value3\\"]"
結果: ["value1","value2","value3"]
我正在從Web請求獲取字符串。 請求的代碼在這里:
func webRequest(uri:String)->String{
var value = "";
let request = URLRequest(url: NSURL(string: uri)! as URL)
do {
let response: AutoreleasingUnsafeMutablePointer<URLResponse?>? = nil
let data = try NSURLConnection.sendSynchronousRequest(request, returning: response)
value = String(data: data, encoding: .utf8)!;
} catch _ {
}
return value;
}
首先,這里的問題不是將字符串轉換為數組。 問題首先是從Web請求獲取數組。
讓我更新您的Web請求功能。
func webRequest(url: URL, completion: ([String]?) -> () { // I have updated this function to be asynchronous
let dataTask = URLSession.shared.dataTask(with: url) {
data, urlResponse, error in
// you might want to add more code in here to check the data is valid etc...
guard let data = data,
let arrayOfStrings = JSONDecoder().decode([String].self, from: data) else {
// something went wrong getting the array of strings so return nil here...
completion(nil)
return
}
completion(arrayOfStrings)
}
dataTask.resume()
}
使用此代碼而不是問題中的代碼,您現在有了一個異步函數,該函數將不會阻止應用程序,並且會將您的字符串數組傳遞給完成函數。
您現在可以像這樣運行它了...
webRequest(url: someURL) { strings in
guard let strings = strings else {
// strings is nil because something went wrong with the web request
return
}
print(strings)
}
創建URL
在您的問題中,您有以下代碼... NSURL(string: someString)! as URL
NSURL(string: someString)! as URL
您可以將其更改為... let url = URL(string: someString)
快速附注
在哪里可以找到教程以及使用在網絡上找到的代碼要小心。 此問題中使用的代碼很舊。 (“過期”至少4或5年)。
如果您正在尋找可以幫助Swift的教程,那么一些建議是...
我將字符串數組更改為:
{
"response" : ["a","b","c"]
}
然后,我使用JSONDecoder()
獲取數組:
func jsonDecode(jsonString:String)->Response{
let jsonData = jsonString.data(using: .utf8)!
let decoder = JSONDecoder()
let decoded = try! decoder.decode(Response.self, from: jsonData)
return decoded;
}
struct Response: Codable {
let response: [String]
}
檢索數組: jsonDecode(...).response
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.