【发布时间】:2018-01-23 14:17:21
【问题描述】:
试图通过协议和扩展将数据从一个视图控制器 MainScreenVC 传递到另一个 RatesVC,但这不起作用,应用程序每次都崩溃。我清楚地看到第二个 VC 上的代码存在问题(因为在第一个 VC 上执行操作后打印显示正确的数据)但不确定哪里出错。
StoryBoard and 1st VC Example Second VC
第一个视图控制器
import UIKit
protocol transferNameOfCurrency {
func currencySelected(nameOfCurrency: String)
}
class MainScreenVC: UIViewController {
var transferCurrencyDelegate: transferNameOfCurrency?
var nameOfTheCurrency: String?
@IBAction func updateRates(_ sender: Any) {
nameOfTheCurrency = "EUR"
transferCurrencyDelegate?.currencySelected(nameOfCurrency:
nameOfTheCurrency)
print(nameOfTheCurrency)
}
}
第二个视图控制器
import UIKit
class RatesVC: UIViewController {
var currencySelected: String?
override func viewDidLoad() {
super.viewDidLoad()
if let push = self.storyboard?.instantiateViewController(withIdentifier: "MainScreenVC") as? MainScreenVC
{
push.transferCurrencyDelegate = self
}
// Do any additional setup after loading the view.
}
}
extension RatesVC: transferNameOfCurrency {
func currencySelected(nameOfCurrency: String) {
currencySelected = nameOfCurrency
print(currencySelected)
}
}
【问题讨论】:
-
崩溃信息是什么?你的代码有几个问题..
-
就委托/协议而言...这看起来不错。 FWIW 最好将
transferNameOfCurrency的名称更改为CurrencyDelegate。因为它就是。它做什么 应该是其函数名称的一部分。还将func currencySelected(nameOfCurrency: String)更改为func currencyChanged(To: String) -
已经修复了崩溃问题,但现在从第一个 VC 打印,显示 nameOfTheCurrency 的正确值,第二个显示 nil。
标签: ios swift delegates protocols extension-methods