3

我对 iOS 开发和 Swift 还很陌生(所以请多多包涵)。我有一个这样定义的类对象:

class LocationPoint {
    var x: Double
    var y: Double
    var orientation: Double

    init(x: Double, y: Double, orientation: Double) {
        self.x = x
        self.y = y
        self.orientation = orientation
    }
}

在我的委托中,我创建了一个类的实例并将其附加到一个数组(在委托之外声明):

var pt = LocationPoint(x: position.x, y: position.y, orientation: position.orientation)
self.LocationPoints.append(pt)

到目前为止,一切都很好。我可以在我的视图控制器中的 textview 对象中显示数组值,并且每次更新时肯定会添加值。

现在,我想做的是在数组计数达到限制(比如 100 个值)之后将其打包为 JSON 对象并使用 HTPP 请求将其发送到网络服务器。我最初的想法是使用SwiftyJSONAlamofire来帮助解决这个问题……但如果我尝试将问题分解为更小的部分,那么我需要:

  1. 从 LocationPoints 数组创建 JSON 对象
  2. 创建 HTTP 请求以将 JSON 数据包发送到网络服务器

现在,我只是想解决第 1 步,但似乎无法开始。我使用 CocoaPods 安装了两个 pod(SwiftyJSON 和 Alamofire),但我不知道如何在我的 viewcontroller.swift 文件中实际使用它们。谁能提供一些关于如何从自定义类结构创建 JSON 对象的指导?

4

2 回答 2

7

你应该看看这里[NSJSONSerialization]的课。

class LocationPoint {
    var x: Double
    var y: Double
    var orientation: Double

    init(x: Double, y: Double, orientation: Double) {
        self.x = x
        self.y = y
        self.orientation = orientation
    }
}

func locationPointToDictionary(locationPoint: LocationPoint) -> [String: NSNumber] {
    return [
        "x": NSNumber(double: locationPoint.x),
        "y": NSNumber(double: locationPoint.y),
        "orientation": NSNumber(double: locationPoint.orientation)
    ]
}

var locationPoint = LocationPoint(x: 0.0, y: 0.0, orientation: 1.0)
var dictPoint = locationPointToDictionary(locationPoint)

if NSJSONSerialization.isValidJSONObject(dictPoint) {
    print("dictPoint is valid JSON")

    // Do your Alamofire requests

}
于 2015-01-28T21:49:13.707 回答
1

为了补充 Marius 的答案,我稍微修改了代码以将位置点集合转换为有效的 JSON 对象。上面的答案适用于单个点,但此函数可用于转换点数组。

func locationPointsToDictionary(locationPoints: [LocationPoint]) -> [Dictionary<String, AnyObject>] {
    var dictPoints: [Dictionary<String, AnyObject>] = []
    for point in locationPoints{
        var dictPoint = [
            "x": NSNumber(double: point.x),
            "y": NSNumber(double: point.y),
            "orientation": NSNumber(double: point.orientation),
            "timestamp": NSString(string: point.timestamp)
        ]
        dictPoints.append(dictPoint)
    }
    return dictPoints
}

然后,在代码中你可以像这样使用它:

var pt = LocationPoint(x: position.x, y: position.y, orientation: position.orientation, timestamp: timeStamp)
self.LocationPoints.append(pt)

if LocationPoints.count == 100 {
    var dictPoints = locationPointsToDictionary(self.LocationPoints)
    if NSJSONSerialization.isValidJSONObject(dictPoints) {
        println("dictPoint is valid JSON")

         // Do your Alamofire requests
    }
    //clear array of Location Points and start over
    LocationPoints = []
}

这应该只在记录 100 个位置点后打包 JSON 对象。希望这可以帮助。

于 2015-01-29T16:41:19.623 回答