欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Swift: 可变参数

发布时间:2025/6/15 编程问答 59 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Swift: 可变参数 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

转自: https://addicechan.github.io/...

在Swift中,命名一个方法参数的时候,如果有多个特定类型的参数,可以直接使用可变参数(Variadic Parameters)。官网文档链接

使用可变参数,其实很简单。就是在参数类型加上…。比如Int…。实际上,方法内部去调用该参数的话,Xcode提示的是[Int]。也就是一个Array。这样也是大大方便。不用非得去声明一个[Int]。

小二。。上代码~~~

// 多数字相加 func add(_ values: Int...) -> Int {return values.reduce(0){ $0 + $1 } }print(add(1,5,8,9)) // 23

再比如,可以封装一个UIAlertController。如果觉得每次得写一大堆alert.addAction() 巴拉巴拉.

extension UIAlertController {class func show(_ vc: UIViewController?, title: String, msg: String, style: UIAlertControllerStyle ,btns: String... ,completionHandler:@escaping ((_ btnIndex: Int) -> Void)) {let alertController : UIAlertController = UIAlertController(title: title, message: msg, preferredStyle: style)for (index, element) in btns.enumerated() {alertController.addAction(UIAlertAction(title: element, style: .default, handler: { _ incompletionHandler(index)}))}if style == .actionSheet {alertController.addAction(UIAlertAction(title: "cancel", style: .cancel, handler: nil))}vc?.present(alertController, animated: true, completion: nil)} }// 使用 UIAlertController.show(self, title: "Alert", msg: "show alert", style: .alert, btns: "previous", "next") { index inprint(index) }

不过,可变参数无法用于Objective-C中。

Objective-C如果要使用可变参数。那么需要使用到va_list等系列C函数。

小二,继续上代码~~~

- (NSString *)add:(NSString *)value, ... NS_REQUIRES_NIL_TERMINATION {NSMutableString *result = [NSMutableString string];[result appendString:value];if (value) {va_list values;// values 会从 value 的指针地址开始取值,直至nilva_start(values, value);id tempValue;while((tempValue = va_arg(values, NSString *))) {[result appendString:tempValue];}// 记得清空va_end(values);}return result; }

使用va_start这个宏,会从value的指针地址开始,一个一个的去取值。对于非指针的话,那么就无法实现。至于 方法名后面的NS_REQUIRES_NIL_TERMINATION,则是在方法调用的时候,加上nil作为终结。因为如果没有nil的话,那么也是会导致 不停的取值,于是,拿到未初始化的内存空间后,就导致崩溃啦。Boom....

写完这个方法后,只能感叹下Swift封装的太好了。很方便的...语法,加上高阶函数的使用。貌似也不太算很公正的对比。(逃。

func add(_ values: String...) -> String {return values.reduce(""){ $0 + $1 } }

这样几行代码,就已经实现了上述Objective-C写的方法了。

写这篇的根源,其实是在翻(gen)看(ben)Swift(jiu)的(bu)官(zhi)方(dao)文(de)档(shuo)。于是看到可变参数这玩意了。后来想想,Objective-C的NSArray、UIAlertView等,其实也是基于这样去写的。

算是又明白了一些。但愿不太迟。

哭瞎了。。。

总结

以上是生活随笔为你收集整理的Swift: 可变参数的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。