我是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
}
}
答案 0 :(得分:1)
您的问题是,在您的协议中,您已将updateData
声明为类型String -> (Void -> Void)
的函数(一个接受String的函数,并返回另一个不带参数且不返回任何内容的函数)我认为你想要的是类型String -> Void
的函数(一个接受String并且不返回任何内容的函数)。所以,当你给updateData
一个字符串时,你会得到一个不带参数的函数。这是错误描述的未使用的函数。
这称为curried function和can be very useful in other situations。
要解决此问题,您只需删除协议声明中的额外括号:
protocol RepeatDailyValueViewControllerDelegate {
// Delete the parentheses after (daysSet: String)
func updateData(daysSet: String)
}