![](/img/trans.png)
[英]Looping through data from an NSArray and extracting the UIImage from a url
[英]Extracting data from NSArray
我的 php 腳本以如下所示的格式向我的 swift iOS 應用程序發送 JSON 響應。 使用以下代碼將其解析為NSArray
:
let jsonArray = try NSJSONSerialization.JSONObjectWithData(data_fixed!, options:[])
我在我的 swift 代碼中創建了以下對象:
class Friend : NSObject {
var name: String?
var id: String?
var profile_pic : String?
}
class Message : NSObject {
var id: String?
var text: String?
var date: NSDate?
var sender: Friend?
}
class Chat : NSObject {
var id : String?
var chat_partner : Friend?
var chat_messages : [Message]?
}
我現在想要做的是循環遍歷下面的NSArray
,並將數據提取到我的對象的實例中,所以在下面的示例中簡單地說,我想創建兩個 id 為 1 和 2 的聊天對象,以及所有適當的變量。 我不確定如何快速正確執行這樣的循環。
JSON 響應:
Array: (
{
chatId = 1;
message = {
1 = {
chatId = 1;
"message_id" = 24242241;
sender = 1233;
text = "hello i am";
timestamp = "2016-05-24 17:13:08";
};
2 = {
chatId = 1;
"message_id" = 421421;
sender = 1233;
text = great;
timestamp = "2016-05-24 17:15:08";
};
};
"user1_id" = 1233;
"user1_name" = David;
"user1_profile_pic" = "http://graph.facebsddsaadsadsook.com/1233/picture?type=large";
"user2_id" = 8543211123;
"user2_name" = 0;
"user2_profile_pic" = "<null>";
},
{
chatId = 2;
"user1_id" = 23413524635;
"user1_name" = 0;
"user1_profile_pic" = "<null>";
"user2_id" = 1233;
"user2_name" = David;
"user2_profile_pic" = "http://graph.facebsdadsook.com/1233/picture?type=large";
}
)
更新:代碼嘗試
var count_chats = 0;
for anItem in jsonArray as! [Dictionary<String, AnyObject>] {
let curr_chat = Chat()
if let chatId = anItem["chatId"] as? String {
curr_chat.id = chatId
}
let friend = Friend()
let user1id = anItem["user1_id"] as! String
let user2id = anItem["user2_id"] as! String
if (user1id == userID) {
if let user2id = anItem["user2_id"] as? String {
friend.id = user2id
}
if let user2name = anItem["user2_name"] as? String {
friend.name = user2name
}
if let user2profilepic = anItem["user2_profile_pic"] as? String {
friend.profile_pic = user2profilepic
}
}
else if (user2id == userID){
if let user1id = anItem["user1_id"] as? String {
friend.id = user1id
}
if let user1name = anItem["user1_name"] as? String {
friend.name = user1name
}
if let user1profilepic = anItem["user1_profile_pic"] as? String {
friend.profile_pic = user1profilepic
}
}
print("passed")
curr_chat.chat_partner = friend
var chat_messages : [Message]? = nil
var count_messages = 0;
if let dataArray = anItem["message"] as? NSArray {
for onemessage in dataArray as! [Dictionary<String, AnyObject>] {
let curr_message = Message()
if let messageid = onemessage["message_id"] as? String {
curr_message.id = messageid
}
if let messagedate = onemessage["timestamp"] as? NSDate {
curr_message.date = messagedate
}
if let messagesender = onemessage["sender"] as? String {
curr_message.sender = messagesender
}
if let messagetext = onemessage["text"] as? String {
curr_message.text = messagetext
}
chat_messages![count_messages] = curr_message
count_messages = count_messages + 1
}
}
curr_chat.chat_messages = chat_messages
self.user_chats![count_chats] = curr_chat
count_chats = count_chats + 1
不是答案,但這可能對您有所幫助,您應該在編寫以下內容時檢查您的屬性是否為零: curr_message.id = onemessage["chatId"] as! String
curr_message.id = onemessage["chatId"] as! String
。 你可以做什么:
if let chatId = onemessage["chatId"] as? String {
curr_message.id = chatId
}
或者,如果您希望它更簡單,您可以使用Swifty JSON並編寫如下內容:
curr_message.id = onemessage["chatId"].stringValue
希望這可以幫助你!
我真的不知道這是否真的會幫助某人,但我已經被這個阻止了 3 天。 我終於看到了這個問題,從字面上看,這個問題就是我的答案,謝謝@Alk。 簡而言之,我正在處理這種類型的數據(NSArray):
[<__NSArrayM 0x6000000556e0>(
{
author = Julioenred;
id = 1;
text = "hello world";
},
{
author = Pepe;
text = "Saludos!!";
}
)
]
我需要的數據是每個索引的作者和文本,所以我能夠做到這一點:
for i in data.first as! [Dictionary<String, AnyObject>] {
let message = Message(message: "", user: "")
if let author = i["author"] as? String {
message.author = author
}
if let text = i["text"] as? String {
message.text = text
}
}
基本上我在字典中搜索我正在尋找的鍵,如果有人問,這是對象消息:
import Foundation
class Message: Mappable {
var author: String? = ""
var text: String? = ""
init(message: String, user: String) {
self.author = user
self.text = message
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.