【问题标题】:Swift return created instance of struct to a functionSwift将创建的结构实例返回给函数
【发布时间】:2015-04-21 00:43:26
【问题描述】:

// 在文件中:Struct.swift 是我定义结构布局的地方。

struct coin 
{
    var coinYear        = String("")
    var userID          = String("")
    var coinSellCoinID  = String("")
    var coinImageURL    = String("")
    var mintYear        = String("")
    var about           = String("")
    var allowBarter     = String("")
}

/*

  1. 在文件 FirstViewController.swift 中,我从输入框中获取硬币 ID 值,然后处理按钮单击并构建 URL 字符串。

  2. 然后我将该 URL 发送到 fetchCoinJSON 函数以获取 JSON 文本

*/

@IBAction func btnSubmitCoinID(sender: AnyObject)
{
    let temp = coinID.text
    let theCoinURL = NSURL(string: MyVariables.url + "getCoinInfo.php?coinID=" + temp)
    fetchCoinJSON(theCoinURL!)
}

// 文件:fetchJson.swift 使用 URL 获取 JSON 字符串,然后我获取 JSON 字符串并将该字符串传递给 parseCoinJson 函数。

       func fetchCoinJSON(theurl: NSURL)
        {
            var error: NSError?

var notWorking = coin()

MyVariables.rawCoinJSON =

NSString(contentsOfURL: theurl, encoding: NSUTF8StringEncoding, error: &error)!

var data: NSData =
MyVariables.rawCoinJSON.dataUsingEncoding(NSUTF8StringEncoding)!

    let anyObj: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &error)
            println("Error: \(error)")

    notWorking = parseCoinJson(anyObj!) <--- var notWorking = nil
            NSLog("OoOoOoOoOoOoOoO")
            println(notWorking.coinWeight) <--- logs null
        }

//file ParseJSON.swift 这里我解析JSON并设置对应的struct值。使用 NSLog 我知道 c.CoinYear 确实包含正确的值以及所有其他值。不过

返回 c

给出错误:ParseJSON.swift:95:16: 'coin' is not convertible to '()'

    func parseCoinJson(anyObj:AnyObject)
    {
        if  anyObj is Array<AnyObject>
        {
            var c = coin()
            for json in anyObj as! Array<AnyObject>
            {
                c.userID = (json["userid"] as AnyObject? as? String) ?? String("") ?? String ("")
                c.mintYear = (json["mintyear"] as AnyObject? as? String) ?? String("") ?? String ("")
                c.coinActiveStatus = (json["isActive"] as AnyObject? as? String) ?? String("") ?? String ("")
                c.coinSellCoinID = (json["sellcoinid"] as AnyObject? as? String) ?? String("") ?? String ("")
                c.coinImageURL = (json["coinImageURL"] as AnyObject? as? String) ?? String("") ?? String ("")
                c.about = (json["about"] as  AnyObject? as? String) ?? String("") ?? String ("")
                c.allowBarter = (json["allowBarter"] as  AnyObject? as? String) ?? String("") ?? String ("")

....

    }
            return c
        }
    }

【问题讨论】:

    标签: json swift struct nsarray instance


    【解决方案1】:
    func parseCoinJson(anyObj:AnyObject)
    

    此函数返回Void,即()。然后您返回coin。你的意思是你的功能是:

    func parseCoinJson(anyObj:AnyObject) -> Coin
    

    请注意,类型应始终以大写字母开头。所以这应该是struct Coin

    【讨论】:

    • 是的!谢谢!此外,我需要将 return c 移到 if 语句之外并进行一些小调整,但这是重大突破!谢谢!
    猜你喜欢
    • 2018-07-10
    • 1970-01-01
    • 2021-10-11
    • 2018-05-27
    • 2021-06-12
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多