Swift 4中如何从字典中取值?(含Facebook好友信息获取代码场景)
从Facebook Taggable Friends返回结果中提取数据的Swift 4实现
嘿,我来帮你搞定从Facebook返回的字典里提取好友信息的问题!首先先修正你代码里的小问题,然后一步步教你安全地取出需要的字段。
第一步:修正代码里的冗余和安全问题
你代码里重复写了两次let info = result! as! [String : AnyObject],而且强制解包!很容易导致崩溃,咱们换成更安全的可选绑定来处理返回结果:
func friends() { let params = ["fields": "id, first_name, last_name, email, picture"] FBSDKGraphRequest(graphPath: "me/taggable_friends", parameters: params).start { (connection, result, error) in // 先处理错误 guard error == nil else { print("获取好友列表出错:\(error!)") return } // 安全解析返回的结果字典 guard let responseDict = result as? [String: Any], let friendsArray = responseDict["data"] as? [[String: Any]] else { print("解析好友数据失败") return } // 到这里friendsArray就是所有好友的数组了,接下来遍历提取每个好友的信息 self.processFriendsArray(friendsArray) } }
第二步:提取单个好友的详细信息
接下来写个辅助方法processFriendsArray,遍历数组里的每个好友字典,取出你需要的字段:
func processFriendsArray(_ friends: [[String: Any]]) { for friend in friends { // 提取基础信息 let friendId = friend["id"] as? String ?? "未知ID" let firstName = friend["first_name"] as? String ?? "未知名字" let lastName = friend["last_name"] as? String ?? "未知姓氏" let email = friend["email"] as? String ?? "未提供邮箱" // 提取头像URL(picture字段是嵌套字典,需要逐层解析) var profilePicUrl = "" if let pictureDict = friend["picture"] as? [String: Any], let dataDict = pictureDict["data"] as? [String: Any], let url = dataDict["url"] as? String { profilePicUrl = url } // 打印或者处理这些信息 print("好友ID:\(friendId)") print("姓名:\(firstName) \(lastName)") print("邮箱:\(email)") print("头像URL:\(profilePicUrl)") print("---") } }
一些注意事项
- 权限问题:确保你在Facebook开发者后台已经申请了
taggable_friends的权限,并且在登录时请求了对应的权限(比如public_profile、email等) - Graph API版本:Xcode 9对应的Facebook SDK可能使用的是较旧的API版本,要确保你的请求路径和字段是对应版本支持的
- 可选值处理:我用了
??来给可选值设置默认值,避免因为某个字段缺失导致崩溃,你可以根据自己的需求调整默认值或者处理逻辑
内容的提问来源于stack exchange,提问作者Mighri Radhia
相关产品推荐
相关产品推荐

