实现协议以将数据从推送的视图控制器传回视图控制器

Implementing protocol to pass data back to a view controller from a pushed view controller

我是 iOS 开发的新手,并且已经在这个问题上停留了几个小时。我认为我在设置结构时做得正确。有人可以检查一下吗?当我在应该发回数据的视图控制器中调用 self.delegate!.updateData(daysSet) 时,它给我以下错误

expression resolves to an unused function

这是我试过的方法:

应该发回数据的视图控制器:

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) 的函数(一个接受字符串的函数和 returns 另一个不接受字符串的函数arguments and returns nothing) 而不是我认为你想要的,类型为 String -> Void 的函数(一个接受 String 和 returns nothing 的函数)。因此,当您给 updateData 一个字符串时,您将返回一个不带参数的函数。这是错误描述的未使用函数。

这叫做curried function and can be very useful in other situations

要解决此问题,您只需删除协议声明中的额外括号集:

protocol RepeatDailyValueViewControllerDelegate {
    // Delete the parentheses after (daysSet: String)
    func updateData(daysSet: String) 
}