实现协议以将数据从推送的视图控制器传回视图控制器
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)
}
我是 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)
}