Alamofire提供了一个额外的项目

时间:2015-03-15 17:27:33

标签: ios swift alamofire

在服务器应用中,我有12个用户。但如果我构建软,我有12个ID,但有13个名字,13个姓氏,当然还有13个全名。但如果我退出(这意味着删除整个数据)并再次登录,一切都很好,Alamofire给了我12件物品。 API很好,它在我的代码中。

数组示例: IDS [5,12,15,16,17,18,19,22,25,28,29,30]

lastnames [,doe,wick,smith等]

所以ids很好,但是姓氏上有一个备用项目(逗号之前的逗号表示一个备用项目)。那么为什么还有一个空白字符串的额外项目?

var firstnamesOfUsers: [String]!
var lastnamesOfUsers: [String]!
var idsOfUsers: [Int]!
var namesOfUsers: [String]!

func getUsers(){
        Alamofire.request(.GET, "https://\(domainText).projektove.cz/users.json", parameters: ["limit": 1000])
            .responseJSON { (request, response, JSONresponse, error) in
                if( error == nil){
                    var responseJSON = JSONresponse as NSMutableDictionary
                    let json = JSON(responseJSON)
                    var users = json["users"]
//                    println(users)

                    if users.count > 0 {
                        for index in 0...users.count-1 {
                            firstnamesOfUsers.append(users[index]["firstname"].stringValue)
                            lastnamesOfUsers.append(users[index]["lastname"].stringValue)
                            idsOfUsers.append(users[index]["id"].intValue)
                            namesOfUsers.append(users[index]["firstname"].stringValue + " " + users[index]["lastname"].stringValue)
                        }
                    }

                }
        }
    }

1 个答案:

答案 0 :(得分:0)

您的代码示例有几个问题,最重要的是您缺少@mattt已经指出的模型对象结构。你当然有机会在这里改进。下面是相同的逻辑,只是重新设计得更健壮。

用户

struct User {
    let id: Int
    let firstName: String
    let lastName: String
    var fullName: String { return "\(self.firstName) \(self.lastName)" }
}

<强> UserService

import Alamofire
import SwiftyJSON

class UserService {
    typealias GetUsersSuccessHandler = [User] -> Void
    typealias GetUsersFailureHandler = (NSURLRequest?, NSHTTPURLResponse?, NSError?) -> Void

    class func getUsers(#success: GetUsersSuccessHandler?, failure: GetUsersFailureHandler?) -> Request? {
        let domainText = "some_random_url"

        let request = Alamofire.request(.GET, "https://\(domainText).projektove.cz/users.json", parameters: ["limit": 1000])
        request.validate()
        request.responseJSON { request, response, jsonObject, error in
            if error != nil || jsonObject == nil {
                failure?(request, response, error)
                return
            }

            let json = JSON(jsonObject!)
            let jsonUsers = json["users"]

            var users = [User]()

            for jsonUser in jsonUsers.arrayValue {
                let id = jsonUser["id"].int
                let firstName = jsonUser["firstname"].string
                let lastName = jsonUser["lastname"].string

                if firstName != nil && lastName != nil && id != nil {
                    let user = User(id: id!, firstName: firstName!, lastName: lastName!)
                }
            }

            success?(users)
        }

        return request
    }
}

<强> SomeClass的

class SomeClass {
    func fetchUsers() {
        UserService.getUsers(
            success: { users in
                println("Fetched users: \(users)")
            },
            failure: { request, response, error in
                println("Failed to fetch users: \(error)")
            }
        )
    }
}

此代码示例编译,请随意给它一个旋转。请特别注意User模型对象的使用以及如何在responseJSON完成处理程序中创建它。

希望这有助于您朝着正确的方向前进。