我有一个协议类Equatable.这个类看起来像这样:
class Item: Equatable {
let item: [[Modifications: String]]
init(item: [[Modifications: String]]) {
self.item = item
}
}
func ==(lhs: Item, rhs: Item) -> Bool {
return lhs.item == rhs.item
}
Run Code Online (Sandbox Code Playgroud)
但这给了我错误(见标题).该属性item是[[String: String]]以前,没有问题,我不知道如何解决这个问题.我试着谷歌搜索和搜索所有的SO但没有运气..
枚举只是一个简单的基本:
enum Modifications: Int {
case Add = 1
case Remove = 2
case More = 3
case Less = 4
}
Run Code Online (Sandbox Code Playgroud) 有人能给我一个很好的理由说明为什么这不起作用:
let a: [Int]? = [1]
let b: [Int]? = nil
a == b
Run Code Online (Sandbox Code Playgroud)
这将是我提出的(如果不优雅)解决方案.但这是微不足道的,所以我觉得我错过了一个很好的理由,为什么没有实现.
func ==<T: Equatable>(lhs: [T]?, rhs: [T]?) -> Bool {
if let lhs = lhs, let rhs = rhs {
return lhs == rhs
}
else if let _ = lhs {
return false
}
else if let _ = rhs {
return false
}
return true
}
Run Code Online (Sandbox Code Playgroud) 我发现.contains(Element)方法在我编写Swift代码的最小经验中非常重要,并且很快意识到Apple改变了它...
func contains(check:[[[Int]]], forElement: [[Int]]) -> Bool {
for element in check {
if areEqual(element, forElement) {
return true
}
}
return false
}
func areEqual(_ a:[[Int]], _ b:[[Int]]) -> Bool {
for i in 0..<a.count {
if a[i] != b[i] {
return false
}
}
return true
}
Run Code Online (Sandbox Code Playgroud)
我一直在搞乱一些大型数组,所以我用那个笨重的函数解决了我的问题.
发生了什么?
你如何使用新的方式?
那里的例子很好,我确信他们打算这样做.
enum HTTPResponse {
case ok
case error(Int)
}
let lastThreeResponses: [HTTPResponse] = [.ok, .ok, .error(404)]
let hadError = lastThreeResponses.contains { element in
if case .error …Run Code Online (Sandbox Code Playgroud)