实现协议以从推送的视图控制器

时间:2015-07-17 19:35:39

标签: ios swift protocols

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

1 个答案:

答案 0 :(得分:1)

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

这称为curried functioncan be very useful in other situations

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

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