Você precisa usar o @objcatributo em didTapCommentButton(_:)para usá-lo com #selector.
Você diz que fez isso, mas recebeu outro erro. Meu palpite é que o novo erro é que Postnão é um tipo compatível com Objective-C. Você só pode expor um método para Objective-C se todos os seus tipos de argumento, e seu tipo de retorno, forem compatíveis com Objective-C.
Você poderia consertar isso criando Postuma subclasse de NSObject, mas isso não fará diferença, porque o argumento para didTapCommentButton(_:)não será de Postqualquer maneira. O argumento para uma função de ação é o remetente da ação, e esse remetente será commentButton, o que é presumivelmente a UIButton. Você deve declarar didTapCommentButtonassim:
@objc func didTapCommentButton(sender: UIButton) {
// ...
}
Você então enfrentará o problema de obter o Postcorrespondente ao botão tocado. Existem várias maneiras de obtê-lo. Aqui está um.
Percebi (já que seu código diz cell.commentButton) que você está configurando uma visualização de tabela (ou uma visualização de coleção). E como sua célula tem uma propriedade não padrão chamada commentButton, presumo que seja uma UITableViewCellsubclasse personalizada . Então, vamos supor que sua célula seja PostCelldeclarada assim:
class PostCell: UITableViewCell {
@IBOutlet var commentButton: UIButton?
var post: Post?
// other stuff...
}
Em seguida, você pode subir na hierarquia de visualização a partir do botão para encontrar PostCelle obter a postagem a partir dele:
@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
}