2017-01-11 3 views
1

Так что я пытаюсь настроить список друзей для своего приложения, и у меня возникает ошибка, когда мне говорят, что компиляция не может преобразовать значение типа «FriendTableViewCell.Type» в ожидаемый тип аргумента «FriendTableViewCell». Это меня смущает, потому что это похоже на то же самое. Может, я что-то упустил?Невозможно преобразовать значение типа «FriendTableViewCell.Type» в ожидаемый тип аргумента «FriendTableViewCell»

Кодекс У меня возникли проблемы с является:

@IBAction func followButtonTap(_ sender: Any) { 
    if let canFollow = canFollow, canFollow == true { 
     delegate?.cell(cell: FriendTableViewCell, didSelectFollowUser: PFUser) 
     self.canFollow = false 
    } else { 
     delegate?.cell(cell: FriendTableViewCell, didSelectUnfollowUser: PFUser) 
     self.canFollow = true 
    } 
} 

Мой Полный код:

import Foundation 

protocol FriendTableViewCellDelegate: class{ 
    func cell(cell: FriendTableViewCell, didSelectFollowUser user: PFUser) 
    func cell(cell: FriendTableViewCell, didSelectUnfollowUser user: PFUser) 
} 




class FriendTableViewCell: UITableViewCell{ 
    @IBOutlet weak var friendName: UILabel! 
    @IBOutlet weak var followButton: UIButton! 

weak var delegate: FriendTableViewCellDelegate? 


var user: PFUser? { 
    didSet { 
     friendName.text = user?.username 
    } 
} 

var canFollow: Bool? = true { 
    didSet { 

     if let canFollow = canFollow { 
      followButton.isSelected = !canFollow 
     } 
    } 
} 

@IBAction func followButtonTap(_ sender: Any) { 
    if let canFollow = canFollow, canFollow == true { 
     delegate?.cell(cell: FriendTableViewCell, didSelectFollowUser: PFUser) 
     self.canFollow = false 
    } else { 
     delegate?.cell(cell: FriendTableViewCell, didSelectUnfollowUser: PFUser) 
     self.canFollow = true 
    } 
} 


} 

ответ

1

Я думаю, что вы просто хотите сказать self, которые проходят бы по этой конкретной ячейки, а не только общий вид.

@IBAction func followButtonTap(_ sender: Any) { 
    if let canFollow = canFollow, canFollow == true { 
     delegate?.cell(cell: self, didSelectFollowUser: PFUser) 
     self.canFollow = false 
    } else { 
     delegate?.cell(cell: self, didSelectUnfollowUser: PFUser) 
     self.canFollow = true 
    } 
} 
+0

Ну, я чувствую себя глупым. вместо делегата .cell? (Клетки: Я, didSelectFollowUser: PFUser) я продолжал пытаться делегат .cell (сам, didSelectFollowUser: PFUser)? Спасибо –

2

ошибка говорит вам необходимо предоставить объект типа FriendTableViewCell а не FriendTableViewCell типа сам.

Просто замените FriendTableViewCell с self в функции:

@IBAction func followButtonTap(_ sender: Any) { 
    if let canFollow = canFollow, canFollow == true { 
     delegate?.cell(cell: self, didSelectFollowUser: PFUser) 
     self.canFollow = false 
    } else { 
     delegate?.cell(cell: self, didSelectUnfollowUser: PFUser) 
     self.canFollow = true 
    } 
} 
+1

Отличные мысли думают одинаково – Pierce

+0

Это будет работать, только если IBAction привязана ко всей ячейке просмотра таблицы, а ячейки табличного представления не запускают IBActions напрямую. –

0

Как говорит другой плакат, ваша функция делегат ожидает, чтобы передать в клетке, но вы передаете в классе ячейки в вызове.

Прохождение в ячейке - плохая идея. Вероятно, вам следует реорганизовать ваш код для передачи в indexPath выбранной ячейки, а не самой ячейки.

Смежные вопросы

 Смежные вопросы