簡體   English   中英

如何基於swiftyJson提取的json在swift中創建類的對象?

[英]how can I create objects of my class in swift based on json fetched by swiftyJson?

我的課如下:

import Foundation
import MapKit

class SingleRequest: NSObject, MKAnnotation {

var title: String?
let created: String
let discipline: String
let coordinate: CLLocationCoordinate2D


var items = NSMutableArray()


init(title: String, created: String, discipline: String, coordinate: CLLocationCoordinate2D) {
    self.title = title
    self.created = created
    self.discipline = discipline
    self.coordinate = coordinate

    super.init()
}
}

我也有一個看起來像的json:

[{"_id":"56c9d44fbcb42e075f7d49b1",
"username":"Ms. Brynlee Quitzon DDS",
"photo":"photo.jpg",
"number":"one",
"description":"Maiores rerum beatae molestiae autem. Voluptatem magni aspernatur est voluptas.",
"__v":0,
"updated_at":"2016-02-21T15:14:23.123Z",
"created_at":"2016-02-21T15:14:23.116Z",
"location":{
"type":"Point",
"coordinates":[5.300567929507009,44.04127433959841]}
},
etc.

現在,我想獲取所有json條目並為每個條目創建SingleRequest對象。

到目前為止,我在此類中創建了一個方法:

class func getAllRequests() {
    print("getAllRequests")
    RestApiManager.sharedInstance.getRequests { json in
        let results = json//["username"]
        for (index: String, subJson: JSON) in results {
            let user: AnyObject = JSON.object



            var title = user["description"]
            let created = user["created_at"]
            let discipline = user["number"]

            let latitude = (user[""]).doubleValue
            let longitude = (user[""]).doubleValue
            let coordinate = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)

            return SingleRequest(title: title, created: created!, discipline: discipline!, coordinate: coordinate)


        }
    }
}

現在有兩個問題:

1)如上所示,我將這兩個字段留為空白:

let latitude = (user[""]).doubleValue
let longitude = (user[""]).doubleValue

那是因為我不知道如何從我的json引用long / lat值,因為它們嵌入在coordinates字段中...

我該如何填充?

2)這個函數會創建所需的對象嗎? 或者我應該例如更改聲明以標記一些返回值:

class func getAllRequests()

謝謝!

對於第一個問題,您首先需要從user["coordinates"]取出數組,然后將其向下轉換為Array, user["coordinates"] as? Array<Double> user["coordinates"] as? Array<Double>

對於第二個問題,它應該返回SingleRequest Array<SingleRequest>

class func getAllRequests() -> Array<SingleRequest> {
    var requests: Array<SingleRequest> = [] 
    RestApiManager.sharedInstance.getRequests { json in
         let results = json//["username"]
         for (index: String, subJson: JSON) in results {
              let user: AnyObject = JSON.object

              var title = user["description"]
              let created = user["created_at"]
              let discipline = user["number"]

              guard let coordinates = user["coordinates"] as? Array<Double> else { print("no lat/long") }

              let latitude = coordinates[0]
              let longitude = coordinates[1]
              let coordinate = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)

              requests.append(SingleRequest(title: title, created: created!, discipline: discipline!, coordinate: coordinate))
        }
    }

    return requests
}
var singleRequestsArray = [SingleRequest]()


class func getAllRequests() {

    RestApiManager.sharedInstance.getRequests { json in

        for (index: String, subJson: JSON) in son {

            let user: AnyObject = subjson.object

            let title = user["description"]
            let created = user["created_at"]
            let discipline = user["number"]

            var coordinate = CLLocationCoordinate2D()

            if let coordinates = user["coordinates"].array{

                let latitude = coordinates.first?).doubleValue
                let longitude = coordinates.array.last?).doubleValue
               coordinate = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
            }

        singleRequestsArray.append(SingleRequest(title: title, created: created!, discipline: discipline!, coordinate: coordinate))

        }
    }
}

希望這個能對您有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM