我在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;
}
答案 0 :(得分:0)
首先,这里的问题不是将字符串转换为数组。问题首先是从Web请求中获取数组。
让我更新您的Web请求功能。
auto&
使用此代码而不是您问题中的代码,您现在有了一个异步函数,该函数不会阻塞应用程序,并且会将您的字符串数组传递给完成函数。
您现在可以像这样运行它...
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()
}
创建URL
在您的问题中,您有此代码... webRequest(url: someURL) { strings in
guard let strings = strings else {
// strings is nil because something went wrong with the web request
return
}
print(strings)
}
您可以将其更改为... NSURL(string: someString)! as URL
快捷便笺
在哪里可以找到教程以及使用在网上找到的代码时要小心。此问题中使用的代码很旧。 (“过期”至少4或5年)。
如果您正在寻找可以帮助Swift的教程,那么一些建议是...
答案 1 :(得分:-1)
我将字符串数组更改为此:
{
"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