gpt4 book ai didi

swift - 将选择器(函数名称)传递给 swift 函数

转载 作者:IT王子 更新时间:2023-10-29 05:50:09 25 4
gpt4 key购买 nike

我想将一个函数的选择器传递给另一个函数。现在我只是传递字符串并执行几个 if 语句。如果我可以将实际的函数选择器传递给函数,我就可以消除所有的 if 语句。

我当前的功能:

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));

最佳答案

#selector() 语法的目的是避免将选择器写成文字字符串时可能出现的错误,这种情况很容易出错。不过,您可以自由编写 Selector(f) 而不是使用 #selector() 语法。

但是,如果 f 本身被键入为选择器,那就更好了:

func getBtn(i: String, f: Selector) -> UIBarButtonItem

这样,您可以继续使用 #selector,但在调用中使用:

items.append(self.getBtn("checkmark",f:#selector(funcOne)))

getBtn 中,您只需将 f 作为按钮操作直接传递即可。

关于swift - 将选择器(函数名称)传递给 swift 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39044028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com