我有以下情形:映射及其中用於循環
protocol A {}
protocol B: A {}
protocol C: A {}
let objects: [A] = ...
我如何遍歷數組,僅是B
類型的對象執行的邏輯?
現在,我在做這樣的事情:
for object in objects {
if let b = object as? B {
...
}
}
但我在想,如果我可以使用where
,使這個更具表現力和優雅。
for b in objects where b is B // <- compiles, but b is typed as A, not B
for b: B in objects where b is B // <- doesn't compile
for b in objects as! [B] where b is B // <- I get a warning that "is" will always be true
如果'protocolB'會定義一個函數'test()',那麼在迭代中你不能在'object'上調用它,因爲'object'是類型的''object''到'protocolB' 'AnyObject',不是'protocolB'類型。 – rid
在更新的代碼中,如果您嘗試在您評論的循環中調用print(object.test())',將會出現錯誤('AnyObject'沒有名爲'test()'的成員)。 – rid
它在Xcode7中絕對正常。包括'print(object)'。這只是評論,因爲它是一個例如 – simons