我提前为提出这样一个愚蠢的问题而道歉,但我从那里的其他答案中得不到我想知道的东西。 以下是Ray Wenderlich iOS课程中自定义委托协议的示例代码
protocol AddItemViewControllerDelegate: class {
func addItemViewControllerDidCancel(_ controller: AddItemViewController)
func addItemViewController(_ controller: AddItemViewController,
didFinishAdding item: ChecklistItem) }
虽然协议的定义非常明确,但是为了使用它应该是一种合同。但这里是协议类的主体中协议功能的实现
func addItemViewController(_ controller: AddItemViewController,
didFinishAdding item: ChecklistItem) {
let newRowIndex = items.count
items.append(item)
let indexPath = IndexPath(row: newRowIndex, section: 0)
let indexPaths = [indexPath]
tableView.insertRows(at: indexPaths, with: .automatic)
dismiss(animated: true, completion: nil)
}
并没有实际使用 controller 参数,什么是didFinishAdding?据我了解,didFinishAdding只是内部参数 item 的外部名称。 但它是如何工作的,从协议主体可以理解,控制器命名为 AddItemViewController 将 ChecklistItem 发送给符合的委托,或者它是一些预定义的函数类型?
答案 0 :(得分:0)
这里我们谈谈Swift代码风格约定。
didFinishAdding
是一个参数描述,它使调用者更清楚地了解它应该是什么。当然,你看到第二个参数的类型是ChecklistItem
,但是为了让开发人员不要混淆,你做了这个简短的解释,哪个项应该传递给函数。
在您的示例中,我认为controller
参数未被使用,因为在此特定实现中不需要它。然而,这是代表的一般风格:你说谁做了这个动作,什么是它的主题。可能存在需要知道AddItemViewController
添加项目的内容的情况。
答案 1 :(得分:0)
didFinishAdding 只是帮助您更好地理解该功能的签名。
在您的示例中," controller"没有使用,但它只是在这种情况下。如果属性在签名中,则不会被迫使用它:)