構造体から構築された2つのデータ配列を比較するという考え方で私は演奏していました。この背後に潜在的な考え方は、ローカルデータからの配列とネットワークデータからの配列を比較し、それらが同じである場合は、ローカルデータを使用して、特にデータの一部が画像になる場合に時間を節約しようとしました。2つの構造体配列を比較します
私はテストのために嘲笑されていますが、私は構造体からのものであるため、配列の比較ができないようですか?これを回避する方法はありますか?
func compareQuery() {
struct packStructNW {
var packName : String
var packDescription : String
var packTitle : String
var packImage : PFFile
var packID: String
}
var packArrayNW = [packStructNW]()
struct packStructLDS {
var packName : String
var packDescription : String
var packTitle : String
var packImage : PFFile
var packID: String
}
var packArrayLDS = [packStructLDS]()
if self.connected {
let packQueryNW = PFQuery(className: "Pack")
packQueryNW.order(byAscending: "packName")
packQueryNW.findObjectsInBackground(block: { (objectsArray, error) in
if error != nil {
print(error!)
} else {
if let packs = objectsArray {
for object in packs {
let arrayName = object.object(forKey: "packName") as! String
let arrayDescription = object.object(forKey: "packDescription") as! String
let arrayTitle = object.object(forKey: "packTitle") as! String
let arrayImage = object.object(forKey: "packImage") as! PFFile
let arrayID = object.objectId as String!
packArrayNW.append(packStructNW(packName: arrayName, packDescription: arrayDescription, packTitle: arrayTitle, packImage: arrayImage, packID: arrayID!))
}
}
}
})
let packQueryLDS = PFQuery(className: "Pack")
packQueryLDS.order(byAscending: "packName")
packQueryLDS.fromLocalDatastore()
packQueryLDS.findObjectsInBackground(block: { (objectsArray, error) in
if error != nil {
print(error!)
} else {
if let packs = objectsArray {
for object in packs {
let arrayName = object.object(forKey: "packName") as! String
let arrayDescription = object.object(forKey: "packDescription") as! String
let arrayTitle = object.object(forKey: "packTitle") as! String
let arrayImage = object.object(forKey: "packImage") as! PFFile
let arrayID = object.objectId as String!
packArrayLDS.append(packStructLDS(packName: arrayName, packDescription: arrayDescription, packTitle: arrayTitle, packImage: arrayImage, packID: arrayID!))
}
}
}
})
print(packArrayNW)
print(packArrayLDS)
if packArrayLDS == packArrayNW {
print("they are the same")
} else {
print("they are different")
}
}
}
----------------- EDIT --------------------
感謝ソリューションWERUreoのために。
私は、それが機能するようにするためには、同等の部分を構造体の拡張部分に移動しなければなりませんでした。私はあなたが表示されている方法がうまくいくと確信しています、私はちょうどそれがエラーなしで起こることができませんでした。
これは配列を比較しているだけですが、問題は今では配列が完全には私が比較コードを実行している時にはデータがバックグラウンドで取得されていないことです。任意のアイデアどのように比較するコードを実行する前に、配列が移入されるのを待つか?メインクラス内の
struct myStruct {
var packName : String
var packDescription : String
var packTitle : String
var packImage : PFFile
var packID: String
}
メインクラスの外
extension PackViewController.myStruct: Equatable {}
func ==(lhs: PackViewController.myStruct, rhs: PackViewController.myStruct) -> Bool {
let areEqual = lhs.packName == rhs.packName &&
lhs.packDescription == rhs.packDescription &&
lhs.packTitle == rhs.packTitle &&
lhs.packImage === rhs.packImage &&
lhs.packID == rhs.packID
return areEqual
}
そのコードはコンパイルされていますか?そうであれば、私たちは写真の一部を欠いているように感じる。それぞれ異なる2つのタイプを持つ2つの異なる配列を比較しようとしています。それは、バットからすぐに失敗するはずです... – WERUreo
ハハはありません。 – Pippo