如何知道是否追加功能,填补了NSObject的

问题描述:

雨燕2.0 Alamofire 2.0的Xcode 7的性能IOS 9如何知道是否追加功能,填补了NSObject的

我有一个调用API和检索JSON格式的好友列表中的下一个函数,转换列表在字典,并将其附加到友谊NSObject的

func GetFriends(completionHandler: ([FriendShip]?, NSError?) ->()) { 

    Alamofire.request(Router.GetFriends(Test().getUserId())).responseJSON { (_, _, result) in 

     var friends = [FriendShip]() 

     switch result { 
     case .Success(let json): 
      if let responseObject = json as? [String: AnyObject], let hits = responseObject["hits"] as? [[String: AnyObject]] { 
      for dictionary in hits { 
       friends.append(FriendShip(dictionary: dictionary)) 
       print(friends) 
      } 
      completionHandler(friends, nil) 
      } 
     case .Failure(_, let error): 
      completionHandler(nil, error as NSError) 
     } 

    } 

打印(字典)结果是:

["_id": 546a6ef98e6df97032266, "friend": { 
    "_id" = 546a4b3e1f8d2c2630dd2; 
    name = "Daniela"; 
    profileImageUrl = "https://api-static/profile/546a4b3e1f8d2c2630dd2.1.jpg"; 
    statusTxt = ""; 
}] 
["_id": 546a6f988e6df97032266, "friend": { 
    "_id" = 546a4ba51f8d2c2630dd2; 
    name = "Mara"; 
    profileImageUrl = "https://api-static/profile/546a4ba51f8d2c2630dd2.1.jpg"; 
    statusTxt = undefined; 
}] 
["_id": 546a70a18e6df97032266, "friend": { 
    "_id" = 546a4bd61f8d2c2630dd2; 
    name = "Alejandro"; 
    profileImageUrl = "https://api-static/profile/546a4bd61f8d2c2630dd2.1.jpg"; 
    statusTxt = "Marty"; 
}] 
["_id": 546a715d8e6df97032266, "friend": { 
    "_id" = 546a4be01f8d2c2630dd2; 
    name = "Pedro"; 
    profileImageUrl = "https://api-static/profile/546a4be01f8d2c2630dd1.1.jpg"; 
}] 

类ES友谊和用户

class FriendShip: NSObject{ 

     var id: String? 
     var userId: String? 
     var user: User? 
     var friendId: String? 
     var friend: User? 
     var date: NSDate? 

     init(dictionary: [String: AnyObject]){ 

     id  = dictionary["id"] as? String 
     userId = dictionary["userId"] as? String 
     user  = dictionary["user"] as? User 
     friendId = dictionary["friendId"] as? String 
     friend = dictionary["friend"] as? User 
     date  = dictionary["date"] as? NSDate 

     } 

     override var description : String { 
     let friendString = friend!.name != nil ? friend!.name! : "nil" 
     let urlString = friend!.profileImageUrl != nil ? friend!.profileImageUrl! : "nil" 
     return "Friendship:\nfriend = \(friendString),\nurlString = \(urlString)" 
     } 
} 

class User: NSObject{ 

     var id: String? 
     var name: String? 
     var statusTxt: String? 
     var profileImageUrl: String? 

     init(dictionary: [String: AnyObject]){ 

     id    = dictionary["id"] as? String 
     name   = dictionary["name"] as? String 
     statusTxt  = dictionary["statusTxt"] as? String 
     profileImageUrl = dictionary["profileImageUrl"] as? String 
     } 

     override var description : String { 
     let nameString = name != nil ? name! : "nil" 
     let profileImageUrlString = profileImageUrl != nil ? profileImageUrl! : "nil" 
     return "Friendship:\nname = \(nameString),\nprofileImageUrl = \(profileImageUrlString)" 
     } 

} 

我怎么能知道/查看/打印,如果friends.append功能是否正常工作和填充确定所有的友谊NSObject的属性?

如果我理解正确,您需要打印/调试Friendship类的内容。

NSObject实施NSObjectProtocol其具有计算属性description。该属性返回一个表示该类内容的字符串。这是您打印对象时看到的文字。所以你的Friendship类已经从NSObject继承了这个description协议。但在你的情况下,它只打印类名,因为这是默认的实现。

所以,如果你想拥有你的类的更有意义的描述,你必须覆盖description属性:

class Friendship: NSObject { 
    var name: String? 
    var age: Int? 

    override var description : String { 
     let nameString = name != nil ? name! : "nil" 
     let ageString = age != nil ? String(age!) : "nil" 
     return "Friendship:\nname = \(nameString),\nage = \(ageString)" 
    } 
} 

我不知道你的实际Friendship类的样子,所以我做了我自己的,非常简单的课程,只包含名称和年龄。

所以,现在当你有Friendship 2个实例(一个充满和一个空的),你打印出来,可以看到的是,内容对象:

let friendship1 = Friendship() 
friendship1.name = "John" 
friendship1.age = 34 
print(friendship1) 

let friendship2 = Friendship() 
print(friendship2) 

打印:

Friendship: 
name = John, 
age = 34 

Friendship: 
name = nil, 
age = nil 

UPDATE

在你的情况下,重写的描述变量应该看起来像这样:

class FriendShip: NSObject{ 

    var id: String? 
    var userId: String? 
    var user: User? 
    var friendId: String? 
    var friend: User? 
    var date: NSDate? 

    init(dictionary: [String: AnyObject]){ 
     id  = dictionary["id"] as? String 
     userId = dictionary["userId"] as? String 
     user  = dictionary["user"] as? User 
     friendId = dictionary["friendId"] as? String 
     friend = dictionary["friend"] as? User 
     date  = dictionary["date"] as? NSDate 

    } 

    override var description : String { 
     let friendDescription = friend != nil ? friend!.description : "nil" 
     let userIdString = userId != nil ? userId! : "nil" 
     return "Friendship:\nfriend = \(friendDescription),\nuserId = \(userIdString)" 
    } 
} 

class User: NSObject{ 

    var id: String? 
    var name: String? 
    var statusTxt: String? 
    var profileImageUrl: String? 

    init(dictionary: [String: AnyObject]) { 
     id    = dictionary["id"] as? String 
     name   = dictionary["name"] as? String 
     statusTxt  = dictionary["statusTxt"] as? String 
     profileImageUrl = dictionary["profileImageUrl"] as? String 
    } 

    override var description : String { 
     let nameString = name != nil ? name! : "nil" 
     let profileImageUrlString = profileImageUrl != nil ? profileImageUrl! : "nil" 
     return "User:\nname = \(nameString),\nprofileImageUrl = \(profileImageUrlString)" 
    } 
} 

你可以测试一下:

// test empty object 
let friendship = FriendShip(dictionary: [String: AnyObject]()) 
print(friendship.description) 

// test correct object 
let user = User(dictionary: ["name": "John", "profileImageUrl": "http://image.com"]) 
let friendship2 = FriendShip(dictionary: ["friend": user, "userId": "1"]) 
print(friendship2.description) 

打印

Friendship: 
friend = nil, 
userId = nil 

Friendship: 
friend = User: 
name = John, 
profileImageUrl = http://image.com, 
userId = 1 
+0

大Joern,但你可以在编辑的代码看,遇到的问题Im是点的友谊NSObject的有2属性,朋友和用户,它们是用户NSObject的引用,我不知道如何在函数**朋友中填充这些属性。append(FriendShip(字典:词典))**以及如何使用用户NSObject的值打印完整的FriendShip NSObject – Edu

+0

若要在'Friendship'类中打印User属性的值,还必须覆盖User类中的'description'属性。然后当你调用'print(friendship)' – joern

+0

对不起,但是如果我设置了** let nameString = name!= nil,那么你会自动获得这两个属性的值。名称! :在用户对象的覆盖函数中的“nil”**和** let friendString = friend.name!= nil? friend.name! :友谊对象的覆盖函数中的“nil”**,这最后一个声明通过一个EXC_BAD_INSTRUCTION错误 – Edu