[英]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.