@objcİle kullanmak için üzerinde didTapCommentButton(_:)niteliği kullanmanız gerekir #selector.
Bunu yaptığını söylüyorsun ama başka bir hata aldın. Tahminimce yeni hata PostObjective-C ile uyumlu bir tip değil. Bir yöntemi yalnızca tüm bağımsız değişken türleri ve dönüş türü Objective-C ile uyumluysa Objective-C'ye maruz bırakabilirsiniz.
PostBir alt sınıf oluşturarak bunu düzeltebilirsiniz NSObject, ama bu önemli olmayacak, çünkü argümanı zaten didTapCommentButton(_:)olmayacak Post. Bir eylem işlevinin argümanı eylemin göndericisidir ve bu gönderen commentButtonmuhtemelen a'dır UIButton. Şöyle beyan etmelisiniz didTapCommentButton:
@objc func didTapCommentButton(sender: UIButton) {
// ...
}
Daha sonra Post, dokunulan düğmeye karşılık gelen sorunla karşılaşacaksınız . Bunu elde etmenin birden çok yolu var. Işte bir tane.
Anladığım kadarıyla (kodunuz söylediği için cell.commentButton) bir tablo görünümü (veya koleksiyon görünümü) oluşturuyorsunuz. Ve hücrenizin adlı standart olmayan bir özelliği commentButtonolduğundan, bunun özel bir UITableViewCellalt sınıf olduğunu varsayıyorum . Öyleyse hücrenizin böyle bir PostCellilan olduğunu varsayalım :
class PostCell: UITableViewCell {
@IBOutlet var commentButton: UIButton?
var post: Post?
// other stuff...
}
Ardından, düğmeden görünüm hiyerarşisinde yukarı doğru yürüyebilir ve gönderiyi buradan PostCellalabilirsiniz:
@objc func didTapCommentButton(sender: UIButton) {
var ancestor = sender.superview
while ancestor != nil && !(ancestor! is PostCell) {
ancestor = view.superview
}
guard let cell = ancestor as? PostCell,
post = cell.post
else { return }
// Do something with post here
}