Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何解析这样的类型数组?_Ios_Arrays_Swift - Fatal编程技术网

Ios 如何解析这样的类型数组?

Ios 如何解析这样的类型数组?,ios,arrays,swift,Ios,Arrays,Swift,当我试着做的时候,我得到了下一个: for item in serverResponse { print(item) } 它给了我: ("0", { "id" : 1, "name" : "Programming" }) ("1", { "id" : 2, "name" : "Music" }) 如何解析此数组以获取name?我把它弄糊涂了=/ 更新 全部答复如下: { "name": "ABC", "books": [ {

当我试着做的时候,我得到了下一个:

for item in serverResponse {
    print(item)
}
它给了我:

("0", {
  "id" : 1,
  "name" : "Programming"
})
("1", {
  "id" : 2,
  "name" : "Music"
})
如何解析此数组以获取
name
?我把它弄糊涂了=/

更新

全部答复如下:

{
    "name": "ABC",
    "books": [
        {
            "id": 1,
            "name": "Programming"
        }
        {
            "id": 2,
            "name": "Music"
        }
    ]
}

您希望将Json转换为一个对象来读取
name
。粗略的解决方案是解析名称。更好的方法是使用或。

您希望将Json转换为对象以读取
名称。粗略的解决方案是解析名称。更好的方法是使用或。

如果您从服务器获得Json,您可以使用它:

func getJSON(urlToRequest: String) -> NSData{
    return NSData(contentsOfURL: NSURL(string: urlToRequest)!)!
}

func parseJSON(inputData: NSData) -> NSArray{
    let boardsDictionary = try! NSJSONSerialization.JSONObjectWithData(inputData, options: .AllowFragments) as! NSArray

    return boardsDictionary
}
然后使用
myData=parseJSON(json)
,您可以使用

let data = myData[0] as! NSDictionary
let name = data["name"]! as? String

如果您从服务器获取Json,您可以使用它:

func getJSON(urlToRequest: String) -> NSData{
    return NSData(contentsOfURL: NSURL(string: urlToRequest)!)!
}

func parseJSON(inputData: NSData) -> NSArray{
    let boardsDictionary = try! NSJSONSerialization.JSONObjectWithData(inputData, options: .AllowFragments) as! NSArray

    return boardsDictionary
}
然后使用
myData=parseJSON(json)
,您可以使用

let data = myData[0] as! NSDictionary
let name = data["name"]! as? String
服务器响应中项目的
{
让itemArray=(项作为?NSDictionary)[“books”]作为?NSArray
对于(var i=0;i
用于服务器响应中的项目{
让itemArray=(项作为?NSDictionary)[“books”]作为?NSArray
对于(var i=0;i
我不喜欢用Swift处理字典。我发现对象的行为更好,更容易管理——它们也更安全

因此,我的建议是将您的响应解析为“Book”结构,然后您可以轻松访问这些结构的属性(id、name)

制作一个完成所有工作的类可能会更好

出于测试目的,我复制了您的回答如下:

let response: NSDictionary = ["name": "ABC", "books": [["id": 1, "name": "Programming"], ["id": 2, "name": "Music"]]]
现在,让我们首先制作图书结构

它将有两个属性,还有一个初始值设定项,它将解码位于响应“books”键数组中的每个字典的内容。初始值设定项可能失败,因为内容可能不可解码

struct Book {
    let id: Int
    let name: String

    init?(_ object: AnyObject) {
        if let dictionary = object as? NSDictionary,
            dictId = dictionary["id"] as? Int,
            dictName = dictionary["name"] as? String {
            self.id = dictId
            self.name = dictName
        } else {
            return nil
        }
    }
}
现在我们可以制作一个包含所有书籍的类。我们需要另一个初始值设定项,它将迭代内容并使用结构创建对象:

class BooksManager {

    var books = [Book]()

    init(response: NSDictionary) {
        if let array = response["books"] as? NSArray {
            self.books = array.flatMap { Book($0) }
        }
    }

}
好的,现在我们已经完成了样板代码的编写,我们可以使用我们的玩具了

创建类的实例:

let manager = BooksManager(response: response)
就这样!现在,该类保存对象,您可以轻松访问它们的属性

例如,使用循环:

for book in manager.books {
    print("Book id: \(book.id), book name: \(book.name)")
}
结果:

书号:1,书名:编程
书号:2,书名:音乐

假设你想要第一本书的名字:

if let nameOfFirstBook = manager.books.first?.name {
    print(nameOfFirstBook)
}
结果:

程序设计

最后一个示例,假设您希望收集数组中的所有图书名称:

let booksNames = manager.books.map { $0.name }
结果:

[“编程”、“音乐”]


我不喜欢用Swift处理字典。我发现对象的行为更好,更容易管理——它们也更安全

因此,我的建议是将您的响应解析为“Book”结构,然后您可以轻松访问这些结构的属性(id、name)

制作一个完成所有工作的类可能会更好

出于测试目的,我复制了您的回答如下:

let response: NSDictionary = ["name": "ABC", "books": [["id": 1, "name": "Programming"], ["id": 2, "name": "Music"]]]
现在,让我们首先制作图书结构

它将有两个属性,还有一个初始值设定项,它将解码位于响应“books”键数组中的每个字典的内容。初始值设定项可能失败,因为内容可能不可解码

struct Book {
    let id: Int
    let name: String

    init?(_ object: AnyObject) {
        if let dictionary = object as? NSDictionary,
            dictId = dictionary["id"] as? Int,
            dictName = dictionary["name"] as? String {
            self.id = dictId
            self.name = dictName
        } else {
            return nil
        }
    }
}
现在我们可以制作一个包含所有书籍的类。我们需要另一个初始值设定项,它将迭代内容并使用结构创建对象:

class BooksManager {

    var books = [Book]()

    init(response: NSDictionary) {
        if let array = response["books"] as? NSArray {
            self.books = array.flatMap { Book($0) }
        }
    }

}
好的,现在我们已经完成了样板代码的编写,我们可以使用我们的玩具了

创建类的实例:

let manager = BooksManager(response: response)
就这样!现在,该类保存对象,您可以轻松访问它们的属性

例如,使用循环:

for book in manager.books {
    print("Book id: \(book.id), book name: \(book.name)")
}
结果:

书号:1,书名:编程
书号:2,书名:音乐

假设你想要第一本书的名字:

if let nameOfFirstBook = manager.books.first?.name {
    print(nameOfFirstBook)
}
结果:

程序设计

最后一个示例,假设您希望收集数组中的所有图书名称:

let booksNames = manager.books.map { $0.name }
结果:

[“编程”、“音乐”]


问题不清楚。提供你们的回答,以及你们做了什么。问题不清楚。提供您的答复,以及您所做的工作。