繁体   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