nil 不能转换为 hashable。
nil is not convertible to hashable.
我有一个自定义控件,它使用数据源来获取项目(就像 NSTableView 所做的那样)。数据源可以 return 任何类型,只要它是可散列的。这些项目用作私人字典中的键。
控件(自定义视图)已添加到界面生成器中的 UI。
当我使用 nil 参数查询数据源时,我 运行 遇到了问题,因为 nil 不能转换为 hashable。
执行此操作的正确方法是什么?
protocol DataSourceProtocol
{
func numberOfChildrenOfItem<Item: Hashable>(item: Item?) -> Int
func child<Item: Hashable>(index: Int, ofItem item: Item?) -> Item
}
class MyControl : NSControl
{
var dataSource : DataSourceProtocol!
func reloadData()
{
//using string as an example of a hashable
let countA = dataSource.numberOfChildrenOfItem("item") // ok
let countB = dataSource.numberOfChildrenOfItem(nil) // not ok
let childA = dataSource.child(0, ofItem: "item") //ok
let childB = dataSource.child(0, ofItem: nil) //not ok
self.reloadChildren(childA)
self.reloadChildren(childB)
}
func reloadChildren<Item: Hashable>(item: Item)
{}
}
使用 NSNull()
获取空对象,然后您可以将其与另一个 NSNull()
进行比较以查看其是否为空。
我有一个自定义控件,它使用数据源来获取项目(就像 NSTableView 所做的那样)。数据源可以 return 任何类型,只要它是可散列的。这些项目用作私人字典中的键。
控件(自定义视图)已添加到界面生成器中的 UI。
当我使用 nil 参数查询数据源时,我 运行 遇到了问题,因为 nil 不能转换为 hashable。
执行此操作的正确方法是什么?
protocol DataSourceProtocol
{
func numberOfChildrenOfItem<Item: Hashable>(item: Item?) -> Int
func child<Item: Hashable>(index: Int, ofItem item: Item?) -> Item
}
class MyControl : NSControl
{
var dataSource : DataSourceProtocol!
func reloadData()
{
//using string as an example of a hashable
let countA = dataSource.numberOfChildrenOfItem("item") // ok
let countB = dataSource.numberOfChildrenOfItem(nil) // not ok
let childA = dataSource.child(0, ofItem: "item") //ok
let childB = dataSource.child(0, ofItem: nil) //not ok
self.reloadChildren(childA)
self.reloadChildren(childB)
}
func reloadChildren<Item: Hashable>(item: Item)
{}
}
使用 NSNull()
获取空对象,然后您可以将其与另一个 NSNull()
进行比较以查看其是否为空。