Bir RegisterGestureRecognizers işlevi ekleyerek Swift'deki bir Protokolü genişletmeye çalışıyorum. İşte tam bir uygulama.Swift'de Seçici ile Protokol Uzantıları
FilterableView, UIImageView öğesinden devralınan sınıflar tarafından kullanılır.
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(Self.filterTapped(_:)))
şu mesajı alıyorum:
Argument of '#selector' refers to a method that is not exposed to Objective-C
ben eksik Bu hatta
import UIKit
protocol FilterableView : class {
var name :String { get }
var view :UIImageView { get }
func applyFilter(originalImage :UIImage) -> UIImage
}
extension FilterableView {
func registerGestureRecognizers() {
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(Self.filterTapped(_:)))
}
func filterTapped(recognizer :UITapGestureRecognizer) {
print("filter Tapped")
}
}
?
@objc anahtar sözcüğünü ekledim ama aynı sorunları. GÜNCELLEME 2
:
Şimdi, FilterableView protokolüne uygun olan benim sınıflarında sorun var. Protokol uzatma yönteminde uygulamayı sağlasa da Xcode, sınıflarımdaki filterTapped işlevini uyguladığım için şikayet ediyor.
Protokolünüze yanlış işlevi ekliyorsunuz. 'Func filterTapped (tanıyıcı: UITapGestureRecognizer)' – JAL
'u eklemelisiniz ve bazı nedenlerden dolayı # # selektör (Self.filterTapped (_ :)) 'i bu' #selector (filterTapped) 'olarak değiştirdiniz. Lütfen doğru şekilde değiştirmeyin. kodun bir parçası. –
'FilterableView.filterTapped' i (_ :) ' –