[英]Implementing protocol to pass data back to a view controller from a pushed view controller
我是iOS开发的新手,已经在这个问题上停留了几个小时。 我以为我在设置结构时做得正确。 有人可以检查一下吗? 当我在应发送回数据的视图控制器中调用self.delegate!.updateData(daysSet)
,出现以下错误
表达式解析为未使用的函数
这是我尝试过的:
应该发送回数据的视图控制器:
import Foundation
import UIKit
class RepeatDailyValueViewController: UITableViewController {
var delegate: RepeatDailyValueViewControllerDelegate? = nil
var daysSet : String = "bam"
override func viewDidLoad() {
super.viewDidLoad()
self.delegate!.updateData(daysSet)
}
}
应该接收数据的视图控制器
import Foundation
import UIKit
protocol RepeatDailyValueViewControllerDelegate {
func updateData(daysSet: String)()
}
class NewAlarmViewController: UITableViewController, RepeatDailyValueViewControllerDelegate {
var daysSet : String = "bam"
@IBOutlet var labelDay: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let vc = segue.destinationViewController as! RepeatDailyValueViewController
vc.delegate = self
}
func updateData(daysSet: String)() {
self.labelDay.text = daysSet
}
}
您的问题是,在您的协议中,您已声明updateData
为String -> (Void -> Void)
的函数(一个接受String并返回另一个不接受参数且不返回任何内容的函数的函数),而不是我以为您想要的是String- String -> Void
类型的函数(该函数采用String却不返回任何内容)。 因此,当给updateData
一个字符串时,您将获得一个不带参数的函数。 这是错误描述的未使用的函数。
这称为Curried函数 , 在其他情况下非常有用 。
要解决此问题,您只需要删除协议声明中的多余括号即可:
protocol RepeatDailyValueViewControllerDelegate {
// Delete the parentheses after (daysSet: String)
func updateData(daysSet: String)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.