arrays - 从函数返回对象数组

标签 arrays swift object

我是 Swift 的新手。

我有以下用于映射 GET JSON 响应的类。

class BasketballTeamResponse: Mappable {
    var name: String?
    var alias: String?
    var market: String?
    var founded: Int?

    var players: [Players]?

    required init?(_ map: Map){ }

    func mapping(map: Map) {
        name <- map["name"]
        alias <- map["alias"]
        market <- map["market"]
        founded <- map["founded"]
        players <- map["players"]
    }
}

class Players: Mappable {
    var full_name: String?
    var jersey_number: String?
    var position: String?

    init(full_name: String, jersey_number: String, position: String) {
        self.full_name = full_name
        self.jersey_number = jersey_number
        self.position = position
    }

    required init?(_ map: Map) { }

    func mapping (map: Map) {
        full_name <- map["full_name"]
        jersey_number <- map["jersey_number"]
        position <- map["position"]
    }
}

假设我有一个 ViewController,我想用一组 Players 对象填充 finalRoster。我已经尝试使用 self 进行附加,但 finalRoster 仍然是空的,我想稍后使用它在 tableview 中显示它们。我什至尝试将返回类型设置为 -> [Players]

class ViewController: UIViewController {

var finalRoster = [Players]()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    getBasketBallTeamPlayers()
}

private func getBasketBallTeamPlayers() {
    let URL = "http://api.sportradar.us/nba-t3/teams/583ec825-fb46-11e1-82cb-f4ce4684ea4c/profile.json?api_key=xxxxxxxxxxxxxxxxxxxxxxxx"
    //var pool = [Players]()
    Alamofire.request(.GET, URL, parameters: nil)
        .validate()
        .responseObject { (response: Response<BasketBallTeamResponse, NSError>) in
            let gswResponse = response.result.value
            if let roster = gswResponse?.players {
                for players in roster {
                    print(players.full_name!)
                    print(players.jersey_number!)
                    print(players.position!)
                    let add = Players(full_name: players.full_name!, jersey_number: players.jersey_number!, position: players.position!)
                    self.finalRoster.append(add)
                }
            }
        }
}

如何将对象数组从 getBasketBallTeamPlayers() 传递到 finalRoster?谢谢

最佳答案

正如 jtbandes 所说,最好将类称为 Player 而不是 Players。

typealias apiSuccess = (result: Player?) -> Void
typealias apiFailure = (error: NSDictionary?) -> Void

class ViewController: UIViewController {
    var finalRoster = [Player]()
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        let myApiSuccess: apiSuccess = {(result: Player?) -> Void in
            print ("Api Success : result is:\n \(result)")
            // Here you can make whatever you want with result 
            self.finalRoster.append(result!)
        }
        let myApiFailure: apiFailure = {(error: NSDictionary?) -> Void in
            print ("Api Failure : error is:\n \(error)")
            // Here you can check the errors with error dictionary looking for http error type or http status code
        }
        getBasketBallTeamPlayers(success: myApiSuccess, failure: myApiFailure)
    }

    private func getBasketBallTeamPlayers(success successBlock :apiSuccess,
                                          failure failureBlock :apiFailure) {
        let URL = "http://api.sportradar.us/nba-t3/teams/583ec825-fb46-11e1-82cb-f4ce4684ea4c/profile.json?api_key=xxxxxxxxxxxxxxxxxxxxxxxx"
        //var pool = [Players]()
        Alamofire.request(.GET, URL, parameters: nil)
            .validate()
            .responseObject { (response: Response<BasketBallTeamResponse, NSError>) in
                if response.result.isSuccess {
                    let gswResponse = response.result.value
                    if let roster = gswResponse?.players {
                        for players in roster {
                            print(players.full_name!)
                            print(players.jersey_number!)
                            print(players.position!)
                            let add = Players(full_name: players.full_name!, jersey_number: players.jersey_number!, position: players.position!)
                            successBlock(result: add)
                        }
                    } else {
                        print("I have some kind of error in my data")
                    }
                } else {
                    let httpError: NSError = response.result.error!
                    let statusCode = httpError.code
                    let error:NSDictionary = ["error" : httpError,"statusCode" : statusCode]
                    failureBlock(error: error)
                }
            }
        }
}

关于arrays - 从函数返回对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37428460/

相关文章:

javascript - 将 X 个 JSON 合并到一个 JavaScript 对象中

javascript - 将两个对象数组与其值进行比较,单元测试

java - 在java中创建帐户类并输出

java - 在java中构建读取和打印部分填充数组的方法

Swift 根据时间戳显示时间或日期

ios - 在尝试从 tableView 中分离出来时发现 nil

json - 如何在 jq 中解构后重建单个对象

javascript - Find() 与 id 数组不起作用

ios - UITableViewRowAction 与 UISwipeActionsConfiguration

php - 试图获取非对象的属性