【问题标题】:Swift: Having trouble passing an array through a method [closed]Swift:通过方法传递数组时遇到问题[关闭]
【发布时间】:2018-08-03 12:49:58
【问题描述】:

编辑我根据一些建议对其进行了更改,但现在出现了不同的错误

我正在尝试编写一个读取数组的函数,如果元素的数量小于 10,那么它会继续向其中添加生成的值。

为此我做了这个函数:

func arrayValueInputter(w : Array<Int>){

    var x = 0;

    repeat{

        x += 2;

        w.append(x);

    } while w.count < 10

    print(w);
}


arrayValueInputter([1, 3, 9, 10]);

print("End Here");

但是每次我运行它都会收到错误:

旧错误

error: extraneous argument label 'w:' in call
arrayValueInputter(w: [1, 3, 9, 10]);

旧错误

新错误

Untitled-2.swift:12:5: error: cannot use mutating member on immutable value: 
'w' is a 'let' constant
 w.append(x);
^
Untitled-2.swift:20:20: error: missing argument label 'w:' in call
arrayValueInputter(&arr);

新错误

我不知道我错过了什么,或者我使用循环错误。从那以后,我才刚刚开始学习 swift。

【问题讨论】:

  • 只需擦除 w on 方法声明之前的“_”。如果使用 _,则调用方法时不需要放置参数标签
  • 要么将签名更改为func arrayValueInputter(w: inout Array&lt;Int&gt;) { ... },要么像arrayValueInputter([1, 3, 9, 10]); 一样调用它(但在inout 的两种情况下,您都需要使输入可变)。
  • 我正在回滚这一点,因为您似乎正在尝试向您的单个问题添加更多问题。我们希望每个...问题一个问题,拜托。如果您还有其他问题,请鼓励您提出其他问题。

标签: arrays swift function methods


【解决方案1】:

两个问题:

  1. 错误说你必须省略参数标签w
  2. 另一个严重的问题是您不能将文字用作inout 参数

var array = [1, 3, 9, 10]
arrayValueInputter(&array)

关于新错误

再来两个问题:

  1. 在调用中缺少参数标签 'w:' 意味着:当您删除下划线时,现在您必须使用参数标签。下划线表示标签将被忽略。

    arrayValueInputter(w: [1, 3, 9, 10]);
    
  2. cannot use mutating member on immutable value 表示:所有传递的参数默认都是常量(let)。将该值分配给具有相同名称的新本地 var iable。

    func arrayValueInputter(w : Array<Int>){
        var w = w
        var x = 0
    ...
    

这是 Swift:没有尾随分号。

【讨论】:

  • 我试图让它可变,经过一些谷歌搜索后找不到任何其他方式,我尝试了你的更正,但它没有解决我现在在编辑中定义的错误跨度>
  • 我更新了答案。
  • 谢谢你是最棒的朋友
  • @vadian 我有点希望你没有回答新错误,因为这使得回滚类似变色龙的问题变得更加困难......
猜你喜欢
  • 1970-01-01
  • 2021-05-23
  • 1970-01-01
  • 2021-10-18
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多