Swift如何修改方法参数

在Swift中不允许修改方法函数中的参数值,因为方法中参数传递的是值而不是地址,参数被修改时编译器会认为此参数为常量类型,并且提示'Cannot assign to value: 'xxx' is a 'let' constant'的错误。

看下面代码:

 func verifyInout() -> Void {
    let datas: [Any] = [1,2,3,4,5,6]
    print("datas",datas)
    handleData(datas: datas)
    print("\(#function)", datas)
 }
    
 func handleData(datas:[Any]) -> Void {
    datas = [7,8,9,0]
    print("\(#function)",datas)
 }

此时会报错误


那如何实现方法/函数参数可以被修改呢?

解决方法:使用inout将方法/函数参数定义为输入输出形式参数;

在形式参数定义开始的时候在前边添加一个 inout关键字可以定义一个输入输出形式参数。输入输出形式参数有一个能输入给函数的值,函数能对其进行修改,还能输出到函数外边替换原来的值.

将上面的代码进行修改就可以了

 func verifyInout() -> Void {
    var datas: [Any] = [1,2,3,4,5,6]
    print("datas",datas)
    handleData(datas: &datas)
    print("\(#function)", datas)
 }
    
 func handleData(datas: inout [Any]) -> Void {
    datas = [7,8,9,0]
    datas.insert(contentsOf: [11,12], at: 2)
    print("\(#function)",datas)
 }

调用时使用&取地址,想方法中传入地址

handleData(datas: &datas)

注意:只能把变量作为输入输出形式参数的实际参数。你不能用常量或者字面量作为实际参数,因为常量和字面量不能修

查看对象内存结构

fr v -R datas 和 fr v -R &datas

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容