如何在Swift中将包含数组的字符串转换为数组?

时间:2019-06-09 17:23:46

标签: arrays swift string

我在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;
}

2 个答案:

答案 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