Ios 无法推断的类型

Ios 无法推断的类型,ios,swift,rest,alamofire,swifty-json,Ios,Swift,Rest,Alamofire,Swifty Json,我正在创建一个Web API来从服务器获取数据,并使用AlamoFire和SwiftyJSON 为什么会出现错误“无法推断 i) 在其自身类型中使用的“地址” ii)使用未解析标识符“userAddress(addressJSON:)” " 请帮助我如何解决此错误 import Foundation import SwiftyJSON class user { var name = String() var uname = String() var email = S

我正在创建一个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
    }
}

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

您的代码意味着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中,JSONDecoder比SwiftyJSON

方便得多。你能解释更多吗?声明这个
var name=String
而不是
var name=String()
?如果在
init
方法中分配了属性的初始值,那么只声明类型就足够了(建议这样做)。它满足规则类和结构必须在创建该类或结构的实例时将其所有存储属性设置为适当的初始值。您甚至可以将属性声明为常量
let name:String
@vadian为什么这样认为?在Swift 4中,JSONDecoder比SwiftyJSON@NazmulHasan因为在使用
JSONDecoder
时,将JSON解析为结构是内置的。整个代码可以大大减少。