为了练习Swift,我一直在研究SQLite包装器。现在是时候添加对NULL
的支持了。我的包装器的当前架构如下所示:
我有一个func
,它接受一个查询和一组参数。数组中的参数必须确认名为Bindable
的协议。采用此协议的每个类型都知道如何将它的实例绑定到SQL语句。因此它看起来像这样:
public protocol Bindable {
func bindTo(statement:Statement, atIndex:Int32) -> Bool
}
我已经制作了几种类型(String
,Int
)以符合此协议。为了支持NULL
,我想允许参数数组包含nil
- 这样的值:
let arguments:[Bindable] = ["Chris", nil]
这不起作用。
在Objective-C中,我只需使用类别将-bindToStatement:atIndex:
添加到NSNull
。由于nil
不是Swift中的类型,因此我无法扩展nil
,因此无法实现Bindable
。
我可以使用NSNull
但我想避免这样做只是为了在Swift中这样做。我还可以创建一个名为SQLNullValue
的常量,它是一个确认为Bindable
的类型的实例。但我也想避免这种情况,因为我不想发明代表NULL
/没有价值的新事物。
那么我如何在Swift中做到这一点?