簡體   English   中英

實現協議以將數據從推送的視圖控制器傳遞回視圖控制器

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

您的問題是,在您的協議中,您已聲明updateDataString -> (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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM