加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

关于Swift:执行被中断,原因:EXC_BAD_INSTRUCTION(代码= EXC_13

发布时间:2020-12-14 05:33:21 所属栏目:百科 来源:网络整理
导读:我只是学习编码所以我决定从 Swift开始.我正在跟踪mac在 here的游览,我在计算数字总和的部分,然后它告诉你尝试做一个平均数字的函数. func averageOf(numbers: Int...) - Int { var sum = 0 var total = 0 var average = 0 for number in numbers { sum += n
我只是学习编码所以我决定从 Swift开始.我正在跟踪mac在 here的游览,我在计算数字总和的部分,然后它告诉你尝试做一个平均数字的函数.
func averageOf(numbers: Int...) -> Int {
    var sum = 0
    var total = 0
    var average = 0
    for number in numbers {
        sum += number
        total++
    } **Execution was interrupted,reason: EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP,subcode=0x0)**
    average = sum/total
    return average
}

我做错了什么(我需要学习什么才能正确行事)?

我猜你没有参数调用你的函数,即:
averageOf()

这是可变参数允许的,数字将是一个空数组.这将导致您尝试将未更改的和除以未更改的总和(因为您将循环遍历循环,没有数字中没有元素),因此将0除以0,并且您将获得除零错误.

为了防止这种情况发生,您可以要求用户提供至少一个数字:

func averageOf(first: Int,rest: Int...) -> Double {
    var sum = first
    var total = 1.0
    for number in rest {
        sum += number
        total++
    }
    return Double(sum)/total
}

这样,如果您尝试不带参数调用它,您将收到编译器错误.

顺便说一句,我改变了你的版本以返回一个Double而不是一个Int,你可能想要试验这两个版本来看看为什么.

(这种技术类似于声明标准的lib max函数,它至少需要2个参数:

func max<T : Comparable>(x: T,y: T) -> T

但是有3个或更多的重载版本:

func max<T : Comparable>(x: T,y: T,z: T,rest: T...) -> T

第一个版本的原因,而不是直接切换到至少需要两个版本的可变版本,然后你可以将它传递给像reduce这样的东西,以找到集合中的最大值,例如减少(a,max))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读