使nil符合自定义协议

时间:2014-12-26 14:57:25

标签: swift

为了练习Swift,我一直在研究SQLite包装器。现在是时候添加对NULL的支持了。我的包装器的当前架构如下所示:

我有一个func,它接受​​一个查询和一组参数。数组中的参数必须确认名为Bindable的协议。采用此协议的每个类型都知道如何将它的实例绑定到SQL语句。因此它看起来像这样:

public protocol Bindable {
  func bindTo(statement:Statement, atIndex:Int32) -> Bool
}

我已经制作了几种类型(StringInt)以符合此协议。为了支持NULL,我想允许参数数组包含nil - 这样的值:

let arguments:[Bindable] = ["Chris", nil]

这不起作用。

在Objective-C中,我只需使用类别将-bindToStatement:atIndex:添加到NSNull。由于nil不是Swift中的类型,因此我无法扩展nil,因此无法实现Bindable

我可以使用NSNull但我想避免这样做只是为了在Swift中这样做。我还可以创建一个名为SQLNullValue的常量,它是一个确认为Bindable的类型的实例。但我也想避免这种情况,因为我不想发明代表NULL /没有价值的新事物。

那么我如何在Swift中做到这一点?

0 个答案:

没有答案