Ios 如何从函数内部获取JSON数据并将其显示在swift的文本字段中?

Ios 如何从函数内部获取JSON数据并将其显示在swift的文本字段中?,ios,json,swift,function,api,Ios,Json,Swift,Function,Api,我一直在学习如何将json数据解析为swift…我正在尝试将我的pincode from区域显示为文本字段…我创建了两个三个swift文件mapview.swift,问题是我想将函数内部的数据获取到另一个swift文件,以便在文本字段中显示它…我尝试创建一个结构来存储pin码,然后将其传递到mapview.swift,但没有成功 这是能够获取pincode作为数据的代码 func parseJson(Json:Data) { let decoder = JSONDecoder()

我一直在学习如何将json数据解析为swift…我正在尝试将我的pincode from区域显示为文本字段…我创建了两个三个swift文件mapview.swift,问题是我想将函数内部的数据获取到另一个swift文件,以便在文本字段中显示它…我尝试创建一个结构来存储pin码,然后将其传递到mapview.swift,但没有成功

这是能够获取pincode作为数据的代码

func parseJson(Json:Data) {

    let decoder = JSONDecoder()
    do{
        let decodedData = try decoder.decode(MapModel.self, from: Json)
        let format = decodedData.results[0].formatted_address
        var pinCode:String!
        for item in decodedData.results[0].address_components{
            if item.types[0] == "postal_code"{
                pinCode =  ( item.long_name)

            }
        }

       print(pinCode)


    }
    catch{

        print(error)
        return 

    }


}

我所要做的就是将pincode数据获取到mapview.swift,这样我就可以将其显示在文本字段中。看起来您需要的是返回pin码的函数。您可以按如下方式执行此操作:

func parsePinCode(fromJson json: Data) -> String? {

    let decoder = JSONDecoder()
    do {
        let decodedData = try decoder.decode(MapModel.self, from: json)
        let format = decodedData.results[0].formatted_address
        var pinCode:String!
        for item in decodedData.results[0].address_components{
            if item.types[0] == "postal_code"{
                pinCode = (item.long_name)

                // Return the pinCode if we found one
                return pinCode
            }
        }
    } catch {
        print(error)
    }

    return nil
}
您可以从其他swift文件调用此函数,如下所示(其中
myJsonData
是要解码的json数据):

编辑:

如果要返回多个值,可以创建一个包含所有要返回值的结构。例如:

struct MapData {
    var pinCode: String?
    var address: String?
}

func parsePinCode(fromJson json: Data) -> MapData? {

    let decoder = JSONDecoder()
    do {
        let decodedData = try decoder.decode(MapModel.self, from: json)

        var mapData = MapData()

        mapData.address = decodedData.results[0].formatted_address

        for item in decodedData.results[0].address_components {
            if item.types[0] == "postal_code" {
                mapData.pinCode = (item.long_name)
                break
            }
        }

        return mapData
    } catch {
        print(error)
    }

    return nil
}

如果我在该函数中有两个数据需要重设呢?我已经更新了答案,以显示如何使用结构从函数返回多个值。在第二种情况下,我将值存储在结构中,我是否正确?无法访问它,伙计…我是否有其他选项可以访问它
struct MapData {
    var pinCode: String?
    var address: String?
}

func parsePinCode(fromJson json: Data) -> MapData? {

    let decoder = JSONDecoder()
    do {
        let decodedData = try decoder.decode(MapModel.self, from: json)

        var mapData = MapData()

        mapData.address = decodedData.results[0].formatted_address

        for item in decodedData.results[0].address_components {
            if item.types[0] == "postal_code" {
                mapData.pinCode = (item.long_name)
                break
            }
        }

        return mapData
    } catch {
        print(error)
    }

    return nil
}