如何在swift中执行像UITableViewDataSource这样的自定义委托方法?
问题描述:
我有一个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
方法。我该怎么办?
答
你只需要在你的果类,也许调用isTrue
方法在您的代理变种didSet
class Fruit{
var delegate:FruitDelegate{
didSet{
self.isTrue()
}
}
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")
}
}
}
+1
准确答案:)谢谢兄弟:) –
使用didSet为代表的变量? – koropok
@koropok,谢谢兄弟我会试试它并让你知道 –
@koropok,你是对的。非常感谢你。 –