簡體   English   中英

如何在Swift中將包含數組的字符串轉換為數組?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM