无法推断出类型

问题描述 投票:-1回答:1

我正在创建一个Web API来从服务器获取数据并使用AlamoFire和SwiftyJSON。

为什么错误出现“无法推断i的类型”'在自己的类型中使用的'地址'ii)使用未解析的标识符'userAddress(addressJSON :)'“请帮我解决这个错误?

import Foundation
import SwiftyJSON

class user {

    var name = String()
    var uname = String()
    var email = String()
    var phone = String()
    var address = userAddress?()
    var company = userCompany?()

    init(userJSON : JSON) {
        self.name = userJSON["name"].stringValue
        self.uname = userJSON["username"].stringValue
        self.phone = userJSON["phone"].stringValue
        self.email = userJSON["email"].stringValue

        self.address = userAddress(addressJSON:userJSON["address"])
        self.company = userCompany(companyJSON:userJSON["company"])
    }

}

class userAddress {

    var street = String()
    var city = String()

    init(addressJSON: JSON) {

        self.street = addressJSON["street"].stringValue
        self.city = addressJSON["city"].stringValue
    }
}

class userCompany {

    var companyName = String()
    var phrase = String()

    init(companyJSON: JSON) {

        self.companyName = companyJSON["name"].stringValue
        self.phrase = companyJSON["catchPhrase"].stringValue
    }
}
ios swift rest alamofire swifty-json
1个回答
2
投票

首先,结构和类名应该以大写字母开头

您的代码暗示JSON提供所有值,因此没有可选项。

如果有一个初始化程序,用默认值声明属性是非常糟糕的习惯。宣布var name : String非常好。

class User {

    var name : String
    var uname : String
    var email : String
    var phone : String
    var address : UserAddress
    var company : UserCompany

    init(userJSON : JSON) {
        self.name = userJSON["name"].stringValue
        self.uname = userJSON["username"].stringValue
        self.phone = userJSON["phone"].stringValue
        self.email = userJSON["email"].stringValue

        self.address = UserAddress(addressJSON:userJSON["address"])
        self.company = UserCompany(companyJSON:userJSON["company"])
    }

}

class UserAddress { ...

class UserCompany { ...

注意:

在Swift 4中,JSONDecoderSwiftyJSON方便得多

© www.soinside.com 2019 - 2024. All rights reserved.