小编yo.*_*n.g的帖子

Swift"where"数组扩展

从Swift 2.0开始,似乎我们可以更接近适用于谓词情境的泛型类型的扩展.

虽然我们仍然不能这样做:

protocol Idable {
    var id : String { get }
}

extension Array where T : Idable {
    ...
}
Run Code Online (Sandbox Code Playgroud)

......我们现在可以这样做:

extension Array {
    func filterWithId<T where T : Idable>(id : String) -> [T] {
    ...
    }
}
Run Code Online (Sandbox Code Playgroud)

...和Swift语法接受它.但是,对于我的生活,当我填写示例函数的内容时,我无法弄清楚如何让编译器开心.假设我要尽可能明确:

extension Array {
    func filterWithId<T where T : Idable>(id : String) -> [T] {
        return self.filter { (item : T) -> Bool in
            return item.id == id
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

...编译器不会接受提供的过滤,过滤,抱怨

无法使用类型为'((T) - > Bool)'的参数列表调用'filter'

如果将item指定为Idable,则类似.这里有运气吗?

where-clause swift swift-extensions

26
推荐指数
1
解决办法
3万
查看次数

UITableViewCell绑定到数据模型(由FetchedResultsController驱动的更新)

我试图拥有自己的个人UITableViewCells:我希望将模型的初始值带到他们的UI表示中,以及在用户进行更改后将新UI值带回模型.让我们首先关注后者:UI变化传播到模型.

为了更多的背景理解,我在添加新项目时遇到了问题.该表通过一个驱动NSFetchedResultsController它发送一个didChangeObject带有ChangeInsert和第二didChangeObjectChangeUpdate.该ChangeInsert触发器的insertRowsAtIndexPaths桌子上和ChangeUpdate做了reloadRowsAtIndexPath.

由于这两个响应,我的表视图要求cellForRowAtIndexPath两次.如果在请求之间正确处理相同的单元格,但这看起来不应该是一个问题:我收到一个断言,模型中的属性已经绑定到了RACSignal!我已经尝试了许多方法来更明确,例如:

RAC(self.model,value) = [ [RACSignal merge:@[self.valueField.rac_textSignal] ] takeUntil:self.rac_prepareForReuseSignal] 然而,重用信号不会及时触发,因为它仍然断言(除此之外,是否有推荐的方法来直接调试这样的触发信号?)

我已经尝试添加一个额外takeUntil:[RACObserve(self, model)的处理信号,一旦重用的单元格模型被覆盖(并将其绑定到新模型),可以理解这似乎导致第一个值处理.然而,加入skip:1观察会让我回到原来的位置.

请告诉我,如果有其他任何地方我可以添加清晰度,或者如果您有其他方式来解决这些问题.我对Reactive Cocoa很新,还在学习最佳实践:)

谢谢!

uitableview ios reactive-cocoa

5
推荐指数
0
解决办法
887
查看次数