从函数返回一个对象数组

时间:2016-05-25 05:27:42

标签: 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,我希望用finalRoster的对象数组填充Players。我已经尝试过追加自我,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?感谢

1 个答案:

答案 0 :(得分:0)

由于jtbandes发表评论,最好将球员称为球员而不是球员。

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)
                }
            }
        }
}