[英]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.