我有一個UIButton
在一個UIViewController
。我使用自定義委託來打印文本。現在,問題是委託方法在理想的不執行時viewDidAppear(animated)
(即,像UITableViewDataSource
)如何在swift中執行像UITableViewDataSource這樣的自定義委託方法?
協議:
protocol FruitDelegate{
func fruit(_ name:String,taste:String)->Bool
}
水果類
class Fruit{
var delegate:FruitDelegate?
var name:String!
var taste:String!
init(name:String,taste:String){
self.name = name
self.taste = taste
}
func isTrue(){
if self.delegate?.fruit(name, taste: taste) == true{
print("Answer Correct")
}else{
print("Answer Wrong")
}
}
}
視圖控制器:
class ViewController: UIViewController,FruitDelegate {
@IBOutlet var textLabel: UILabel!
let fruit = Fruit(name: "mango", taste: "sweet")
override func viewDidLoad() {
super.viewDidLoad()
self.fruit.delegate = self
}
func fruit(_ name: String, taste: String) -> Bool {
if name == "mango" && taste == "sweet"{
return true
}else{
return false
}
}
@IBAction func actionRefreshButton(_ sender: UIButton) {
self.fruit.isTrue()
}
}
我知道下面的代碼會給我我的問題的確切解決方案。
override func viewDidLoad() {
super.viewDidLoad()
self.fruit.delegate = self
self.fruit.isTrue()
}
但是,是否有必要呼籲self.fruit.isTrue()
上viewController
方法呢? (高達viewDidAppear
)。在UITableView
中,當出現查看時,不需要呼叫reloadData()
。同樣的方法,我需要執行FruitDelegate
方法。我該怎麼辦?
使用didSet爲代表的變量? – koropok
@koropok,謝謝兄弟我會試試它並讓你知道 –
@koropok,你是對的。非常感謝你。 –