Anda perlu menggunakan @objcatribut on didTapCommentButton(_:)untuk menggunakannya dengan #selector.
Anda mengatakan Anda melakukan itu tetapi Anda mendapat kesalahan lain. Dugaan saya adalah bahwa kesalahan baru itu Postbukan tipe yang kompatibel dengan Objective-C. Anda hanya dapat mengekspos metode ke Objective-C jika semua tipe argumennya, dan tipe kembaliannya, kompatibel dengan Objective-C.
Anda dapat memperbaikinya dengan membuat Postsubkelas dari NSObject, tetapi itu tidak akan menjadi masalah, karena argumen ke didTapCommentButton(_:)tidak akan menjadi a Post. Argumen ke fungsi tindakan adalah pengirim tindakan, dan pengirim itu akan commentButton, yang mungkin a UIButton. Anda harus menyatakan didTapCommentButtonseperti ini:
@objc func didTapCommentButton(sender: UIButton) {
// ...
}
Anda kemudian akan menghadapi masalah mendapatkan yang Postsesuai dengan tombol yang disadap. Ada banyak cara untuk mendapatkannya. Ini dia.
Saya mengumpulkan (karena kode Anda mengatakan cell.commentButton) bahwa Anda sedang menyiapkan tampilan tabel (atau tampilan koleksi). Dan karena sel Anda memiliki properti non-standar bernama commentButton, saya berasumsi bahwa itu adalah UITableViewCellsubkelas khusus . Jadi anggaplah sel Anda PostCelldinyatakan seperti ini:
class PostCell: UITableViewCell {
@IBOutlet var commentButton: UIButton?
var post: Post?
// other stuff...
}
Kemudian Anda dapat menjalankan hierarki tampilan dari tombol untuk menemukan PostCell, dan mendapatkan postingan darinya:
@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
}