Necesitas usar el @objc atributo on didTapCommentButton(_:)para usarlo #selector.
Dice que hizo eso, pero recibió otro error. Supongo que el nuevo error es que Postno es un tipo compatible con Objective-C. Solo puede exponer un método a Objective-C si todos sus tipos de argumentos y su tipo de retorno son compatibles con Objective-C.
Podrías arreglar eso haciendo Postuna subclase de NSObject, pero eso no va a importar, porque el argumento de didTapCommentButton(_:)no será de Posttodos modos. El argumento de una función de acción es el remitente de la acción, y ese remitente será commentButton, que presumiblemente es un UIButton. Deberías declarar didTapCommentButtonasí:
@objc func didTapCommentButton(sender: UIButton) {
// ...
}
Luego, enfrentará el problema de obtener el Postbotón correspondiente al tocado. Hay varias formas de conseguirlo. Aquí hay uno.
Entiendo (ya que su código dice cell.commentButton) que está configurando una vista de tabla (o una vista de colección). Y dado que su celda tiene una propiedad no estándar nombrada commentButton, supongo que es una UITableViewCellsubclase personalizada . Así que supongamos que su celda se PostCelldeclara así:
class PostCell: UITableViewCell {
@IBOutlet var commentButton: UIButton?
var post: Post?
// other stuff...
}
Luego, puede subir la jerarquía de vistas desde el botón para encontrar PostCelly obtener la publicación de él:
@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
}