如何知道是否追加功能,填补了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
大Joern,但你可以在编辑的代码看,遇到的问题Im是点的友谊NSObject的有2属性,朋友和用户,它们是用户NSObject的引用,我不知道如何在函数**朋友中填充这些属性。append(FriendShip(字典:词典))**以及如何使用用户NSObject的值打印完整的FriendShip NSObject – Edu
若要在'Friendship'类中打印User属性的值,还必须覆盖User类中的'description'属性。然后当你调用'print(friendship)' – joern
对不起,但是如果我设置了** let nameString = name!= nil,那么你会自动获得这两个属性的值。名称! :在用户对象的覆盖函数中的“nil”**和** let friendString = friend.name!= nil? friend.name! :友谊对象的覆盖函数中的“nil”**,这最后一个声明通过一个EXC_BAD_INSTRUCTION错误 – Edu