在我的项目中,我遇到了Swift问题,它无法识别包含协议类型的变量。这意味着我不能使用存储类型的变量来检查实例的类型是否与它匹配。
我在一些简短的背景下添加了有问题的代码部分。
这是某种错误还是我监督的事情非常糟糕?
使用XCode 7.3,Swift 2.2
//Context of Issue BEGIN
class TaskValueObject {
//ManyData, VeryComplexity, SoBig, wow..
}
typealias TaskListSorterBlock = (TaskValueObject, TaskValueObject) -> Bool
protocol TaskListSorter : class {
init()
var localizedTitle : String { get }
var sorterBlock : TaskListSorterBlock { get }
}
class PriorityTaskListSorter : TaskListSorter {
// ... Implementation ...
}
// Many other TaskListSorter implementation classes ...
//Context of Issue END
class TaskListContainer {
weak var currentSorter : TaskListSorter?
var sorters : [TaskListSorter]
init() {
self.sorters = [ PriorityTaskListSorter(), /* ... Instances created for <TaskListSorter> implementing class ... */ ]
loadDefaultSorter()
}
static var defaultSorterType : TaskListSorter.Type = PriorityTaskListSorter.self
private func loadDefaultSorter() {
let defaultSorterType = TaskListContainer.defaultSorterType
for sorter in self.sorters {
if sorter is defaultSorterType {
// ^ ERROR HERE : defaultSorterType is not a 'type'
self.currentSorter = sorter
}
}
}
}
更新1:如果我用以下内容替换有问题的行,我会得到同样的错误:
if let defaultSorter = sorter as? defaultSorterType {
更新2:用下面的代码替换有问题的行,使代码工作。但是我在这里使用的是'dynamicType',它不是由代码完成提供的(必须是原因......)。问题仍然存在,为什么前两次尝试不起作用?
if sorter.dynamicType == defaultSorterType {