我有一個 json 物件并將其存盤為 initialData,然后在將 json 物件存盤到另一個 modifiedData 中進行一些更改后。現在我試圖比較 initialData 和 modifiedData 的兩個 json 物件,但我無法比較它。
注意:這里的 json 物件是動態值。
示例代碼:
let jsonObjectVal = JSON(message.body)
let initialData = jsonObjectVal
在保存操作中,我修改了資料物件。
let jsonObjectModVal = JSON(message.body)
let modifiedData = jsonObjectModVal
if initialFormDataJson == jsonObjectVal {
print("json object are equal save handler")
} else {
print("json object are not equal save handler")
}
任何幫助非常感謝請...
uj5u.com熱心網友回復:
這是一個隨機資料結構的示例,說明您可以如何做到這一點:
import Foundation
final class YourObject: Decodable, Equatable {
var field1: String
var field2: Int
var field3: [String : Double]
static func == (lhs: YourObject, rhs: YourObject) -> Bool {
lhs.field1 == rhs.field1
&& lhs.field2 == rhs.field2
&& lhs.field3 == rhs.field3
}
}
let firstJSONString = """
{
"field1":"Some string",
"field2":1,
"field3":{
"Some string":2
}
}
"""
let firstJSONData = firstJSONString.data(using: .utf8)!
let firstObject = try? JSONDecoder().decode(YourObject.self, from: firstJSONData)
let secondJSONString = """
{
"field1":"Some string",
"field2":1,
"field3":{
"Some string":2
}
}
""" // Same.
let secondJSONData = secondJSONString.data(using: .utf8)!
let secondObject = try? JSONDecoder().decode(YourObject.self, from: secondJSONData)
let thirdJSONString = """
{
"field1":"Some other string",
"field2":2,
"field3":{
"Some string":3
}
}
""" // Differs.
let thirdJSONData = thirdJSONString.data(using: .utf8)!
let thirdObject = try? JSONDecoder().decode(YourObject.self, from: thirdJSONData)
print(firstObject == secondObject) // true
print(firstObject == thirdObject) // false
注意:您提到物件應該是動態的,這就是為什么它是class. 如果您需要一個值物件,您將能夠使用struct并避免手動實作==運算子。
這當然只是一個開始。掌握了特定的 JSON 結構,您可以隨時搜索更復雜的示例,互聯網上到處都是這些示例。
uj5u.com熱心網友回復:
從 JSON 創建一個 NSObject 類或結構,并比較所有屬性以檢查相等性并相應地回傳 true/false。Equatable 協議將在這里派上用場。
class A: Equatable {
func equalTo(rhs: A) -> Bool {
// whatever equality means for two As
}
}
func ==(lhs: A, rhs: A) -> Bool {
return lhs.equalTo(rhs)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/365719.html
