, ()
() Any , , switch, " ". , , ( ), , .
:
func compareAnyArrays(arr1: [Any?], _ arr2: [Any?]) -> Bool {
return arr1.count == arr2.count && !zip(arr1, arr2).contains {
if let v1 = $1 {
switch $0 {
case .None: return true
case let v0 as String:
if let v1 = v1 as? String { return !(v0 == v1) }; return true
case let v0 as Int:
if let v1 = v1 as? Int { return !(v0 == v1) }; return true
case _ : return true
}
}
else if let _ = $0 { return true }
return false
}
}
, , switch , ( ) compare(...) @Roman Sausarnes: s
func compareAnyArrays(arr1: [Any?], _ arr2: [Any?]) -> Bool {
func compare<T: Equatable>(obj1: T, _ obj2: Any) -> Bool {
return obj1 == obj2 as? T
}
return arr1.count == arr2.count && !zip(arr1, arr2).contains {
if let v1 = $1 {
switch $0 {
case .None: return true
case let v0 as String: return !compare(v0, v1)
case let v0 as Int: return !compare(v0, v1)
case _ : return true
}
}
else if let _ = $0 { return true }
return false
}
}
:
/* Example usage
let ex1_arr1 : [Any?] = ["foo", nil, 3, "bar"]
let ex1_arr2 : [Any?] = ["foo", nil, 3, "bar"]
compareAnyArrays(ex1_arr1, ex1_arr2) // true
/* Example usage
let ex2_arr1 : [Any?] = ["foo", nil, 2, "bar"]
let ex2_arr2 : [Any?] = ["foo", 3, 2, "bar"]
compareAnyArrays(ex2_arr1, ex2_arr2) // false