我有一个向上冒泡的延伸部分,
但在 Swift 3 中,
无法推断通用参数“T”
public extension UIResponder
{
public func next<T>() -> T?
{
guard let responder = self.next
else { return nil }
return (responder as? T) ?? responder.next()
}
}
// note - kudos to this excellent post:
// https://blog.veloxdb.com/2016/05/12/bubbling-events-using-uiresponder-in-swift/
在 Swift
class SnapDot:UIView
{
.....
func handleTap(g:UITapGestureRecognizer)
{
(next() as Snap?)?.oneDotWasClicked(self)
}
我担心不仅(a)我不明白为什么它不会在 Swift 3 中推断出来,而且(b)即使通过无休止地尝试随机变化,我也无法让它在 Swift 3 中工作:O
这是现有的名称之间的冲突next
的方法UIResponder
,以及你的扩展方法。self.next
里面
您的方法指的是(通用)方法本身。
重命名扩展使其编译:
public extension UIResponder {
public func nextOfType<T>() -> T? {
guard let responder = self.next
else { return nil }
return (responder as? T) ?? responder.nextOfType()
}
}
即使您没有要求,这里也有一个迭代而不是
递归版本:)
public extension UIResponder {
public func nextOfType<T>() -> T? {
var current = self
while let responder = current.next {
if let match = responder as? T {
return match
}
current = responder
}
return nil
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)