ios - 实现协议(protocol)以将数据从推送的 View Controller 传回 View Controller

标签 ios swift protocols

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

expression resolves to an unused function

这是我尝试过的:

应该发回数据的 View Controller :

import Foundation
import UIKit

class RepeatDailyValueViewController: UITableViewController {

var delegate: RepeatDailyValueViewControllerDelegate? = nil

var daysSet : String = "bam"

override func viewDidLoad() {
    super.viewDidLoad()
    self.delegate!.updateData(daysSet)
    }
 }

应该接收数据的 View Controller

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
    }
}

最佳答案

您的问题是,在您的协议(protocol)中,您已将 updateData 声明为 String -> (Void -> Void) 类型的函数(一个接受String 并返回另一个不接受任何参数且不返回任何内容的函数)而不是我认为你想要的,类型为 String -> Void 的函数(一个接受 String 且不返回任何内容的函数)。因此,当您给 updateData 一个字符串时,您将返回一个不带参数的函数。这是错误所描述的未使用的函数。

这叫做 curried functioncan be very useful in other situations .

要解决此问题,您只需删除协议(protocol)声明中多余的括号即可:

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

关于ios - 实现协议(protocol)以将数据从推送的 View Controller 传回 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31483434/

相关文章:

ios - iOS 10 升级后 scanForPeripheralsWithServices 未发现任何设备

iphone - 由于内存泄漏导致应用程序崩溃

http - URI 是否包含协议(protocol)?

ios - 在手动关闭 View 之前如何将数据转发到协议(protocol)?

c# - 串行数据的二进制通信协议(protocol)解析器设计

ios - 具有多个 subview 问题的容器 View

ios - Sqlite for iOS 是用哪种线程模式编译的?

swift - subview 未按与 super View 成比例调整大小

ios - NSTimeInterval 作为倒数计时器,将其作为单独的可重用类应用

Swift 闭包捕获不是通过 for 循环中的引用?