【发布时间】:2020-09-07 20:24:34
【问题描述】:
我有 2 个值来跟踪我的用户可以在应用内购买的福利类型的当前值。我想在purchaseViewController 中更新它们,并在purchaseViewController 被解除后在前一个视图控制器中使用它们。我尝试使用协议/委托和回调来做到这一点。但是,我得到了基本相同的错误,两者都说“实例成员'delegate/callback'不能用于类型'purchasesViewController'”。这是我第一次尝试将数据传回,我主要只是在学习教程,可能错过了一步,但我认为这两种方法都会出现相同类型的错误,这很奇怪。
父视图控制器上的代码:
func sendBack(staticIncreases: Int, percentIncreases: Int) { //Protocol function
self.avalibleIncreases = staticIncreases
self.currentPercentIncreases = percentIncreases
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "improveFromOpen"{
let next = segue.destination as! purchasesViewController
next.currentPercentIncreases = currentPercentIncreases
next.username = username
next.avalibleIncreases = avalibleIncreases
purchasesViewController.delegate = self //Error "Instance member 'delegate' cannot be used on type 'purchasesViewController'"
purchasesViewController.callback = { result in //Error "Instance member 'delegate' cannot be used on type 'purchasesViewController'"
self.avalibleIncreases = result[0]
self.currentPercentIncreases = result[1]
}
}
purchaseViewController 上的代码:
protocol updateBoosts {
func sendBack(staticIncreases: Int, percentIncreases: Int)
}
class purchasesViewController: UIViewController {
var delegate: updateBoosts? = nil
var callback : (([Int])->())?
var username: String!
var currentPercentIncreases: Int!
var avalibleIncreases: Int!
func sendBackVals(){
if self.delegate != nil {
self.delegate?.sendBack(staticIncreases: avalibleIncreases, percentIncreases: currentPercentIncreases)
}
let out = [avalibleIncreases!, currentPercentIncreases] as [Int]
callback?(out)
}
override func viewWillDisappear(_ animated: Bool) {
sendBackVals()
}
知道我的错误在哪里吗?
【问题讨论】:
-
协议必须是
protocol NAME: class { },delegate应该是weak,并确保您符合父类中的协议。您也不需要在sendBackVals()中进行 nil 检查,因为您使用的是可选链接。
标签: ios swift uiviewcontroller callback delegates