2
私は、上向きに泡の拡張子を持つSwift 3では、パラメータを推測するためにさらに情報が必要ですか?
が、スウィフト3に、
ジェネリックパラメータ 'T' を用いると、可能性、スウィフト< 3で
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/
を推測することができませんでしたこのように使用してください:
class SnapDot:UIView
{
.....
func handleTap(g:UITapGestureRecognizer)
{
(next() as Snap?)?.oneDotWasClicked(self)
}
私はSwift 3ではなぜそれが推論されないのか分かりませんが、(b)無限のバリエーションを無限に試しても、Swift 3で動作させることはできません。 O
本当に*何*:拡張子の名前を変更
はそれをコンパイルします変わったのは、関数に名前のない引数を加えることです。たとえば 'public func next(_:Void =()) - > T?'のようになります。コンパイラは、同じ名前のプロパティと引数のないメソッドのあいだを明確にすることはできないようです(この場合、キャストまたは型推論によって曖昧さを解消できない理由がわかりません) –
Hamish
@Hamish :Swift 2と3の両方で、計算されたプロパティ 'var foo'と' func foo() - > Int'の両方が "無効な宣言"で失敗すると宣言しています。 –
私の他のトリッキーな拡張を許可する必要があります。あなたが修正する必要があった... http://stackoverflow.com/questions/39835397 ...私はここでメタタイプを使用する必要はない理由が混乱しています。 (あるいは実際には 'if let'とは対照的にメタタイプのアプローチを使って書くことができます) – Fattie