我想將函數的選擇器傳遞給另一個函數。現在我只是傳遞字符串,並做幾個if語句。如果我可以將實際的函數選擇器傳遞給函數,我可以消除所有if語句。傳遞選擇器(函數名稱)在swift中運行
我目前的功能:
func getBtn(i: String, f: String) -> UIBarButtonItem
{
let btn: UIButton = UIButton();
btn.frame=CGRectMake(0,0,30,30)
btn.setBackgroundImage(UIImage(named:i), forState: UIControlState.Normal)
if f == "funcOne"{ btn.addTarget(self, action: #selector(self.funcOne), forControlEvents:.TouchUpInside) }
else if f == "funcTwo"{ btn.addTarget(self, action: #selector(self.funcTwo), forControlEvents:.TouchUpInside) }
else if f == "funcThree"{ btn.addTarget(self, action: #selector(self.funcThree), forControlEvents:.TouchUpInside) }
else if f == "funcFour"{ btn.addTarget(self, action: #selector(self.funcFour), forControlEvents:.TouchUpInside) }
// etc.
let barBtn = UIBarButtonItem(customView: btn)
return barBtn;
}
用法:
items.append(self.getBtn("checkmark",f:"funcOne"));
我想怎麼能夠做到:
func getBtn(i: String, f: SOME_TYPE_OF_THING) -> UIBarButtonItem
{
let btn: UIButton = UIButton();
btn.frame=CGRectMake(0,0,30,30)
btn.setBackgroundImage(UIImage(named:i), forState: UIControlState.Normal)
btn.addTarget(self, action: #selector(f), forControlEvents:.TouchUpInside)
let barBtn = UIBarButtonItem(customView: btn)
return barBtn;
}
用法:
items.append(self.getBtn("checkmark",f:self.funcOne));
感謝您的釘牢。我沒有收到任何錯誤。正是我所希望的。將在構建中進行測試。 –
完美無瑕。謝謝。將在2分鐘內接受。 –
很高興幫助。把它看作僅僅是將'#selector'的使用「推回」到行動的早期階段的一種方式。而不是在被調用者中執行它,我們在調用者中執行它。 – matt