swift中的闭包可以用于两个类之间的通信吗?

时间:2017-06-08 13:19:29

标签: objective-c swift closures block

我有UITableView的自定义单元格。当用户点击单元格中的按钮时,用户必须从当前ViewController1导航到ViewController2。我在自定义单元格类中定义了按钮操作。但是需要回拨ViewController1

我尝试使用闭包,类似于我们在目标C中使用块的方式。它在同一个类中使用时工作正常。但是在2个不同的类中使用时会出错。

1 个答案:

答案 0 :(得分:1)

您需要在那里使用委托协议。

示例: UserItem中发生事件时发送cell的协议:

protocol TappedUserDelegate: class {
    func userInfoTapped(_ tappedUser: UserItem?)
}

controller

extension Controller: TappedUserDelegate {
    func userInfoTapped(_ user: UserItem?) {
        // user is tapped user in cell    
    }
}

tableView func:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    // ........
    cell.delegateUserTaps = self // for user info taps to perform segue
    // ........
}

在自定义cell中:

class CustomCell: UITableViewCell {
   weak var delegateUserTaps: TappedUserDelegate? // for sending user info

   // ........
   func userInfoTapped() {
       delegateUserTaps?.userInfoTapped(userItem) // <- send data to controller
   }
}

当调用userInfoTapped时,控制器中的功能将由该用户执行。

我已经给了你一个主意。

希望有所帮助