如何向 Swift 数组添加扩展以有条件地追加?
Posted
技术标签:
【中文标题】如何向 Swift 数组添加扩展以有条件地追加?【英文标题】:How to Add an Extension to Swift Array To Conditionally Append? 【发布时间】:2017-02-09 12:08:31 【问题描述】:有没有办法将其作为 Array 的扩展而不是不断增长的 switch 语句?
fileprivate var exteriorColorOptions = [ExteriorColorOption]()
fileprivate var otherOptions = [SomeOtherOption]()
: more options
func add(option:FilteredOption)
switch(option)
case let thing as ExteriorColorOption:
exteriorColorOptions.append(thing)
case and on and on
default:
break
我希望能够使用正确的扩展程序执行以下操作:
exteriorColorOptions.appendIfPossible(option)
otherOptions.appendIfPossible(option)
注意:switch 方法来自 Swift: Test class type in switch statement
【问题讨论】:
【参考方案1】:这应该可行:
extension Array
mutating func appendIfPossible<T>(newElement: T)
if let e = newElement as? Element
append(e)
条件转换newElement as? Element
成功,如果
新元素符合或是数组元素类型Element
(的子类)的实例。
例子:
class A
class B: A
class C
var array: [A] = []
array.appendIfPossible(newElement: B())
print(array) // [B]
array.appendIfPossible(newElement: C())
print(array) // [B]
【讨论】:
【参考方案2】:其实答案是正确的,但可能不是你想要的:
extension Array
mutating func safeAppend(newElement: Element?)
if let element = newElement
append(element)
如果您尝试附加不是数组原始类型的元素,这将引发编译时错误。
例如如果您尝试将Int
附加到字符串数组[String]
,则会看到错误。
【讨论】:
以上是关于如何向 Swift 数组添加扩展以有条件地追加?的主要内容,如果未能解决你的问题,请参考以下文章
如何设置 automake 和 autoconf 以有条件地构建程序(测试或其他)