ios - 在 Xcode 中使用枚举编译 swift 文件时出现段错误 11

标签 ios xcode swift segmentation-fault

当尝试编译像这样的 Swift 文件(作为项目的一部分)时,Xcode(版本 7.3.1)在为“operationForOperationType”发出 SIL 时抛出段错误 11 '

import Foundation

enum OperationType: String{
    case Addition = "∑"

    func operationForOperationType() -> ([Double], [[Double]]? -> Double){
        switch self {
            case OperationType.Addition:
                return {$0.reduce(0, combine: {$0 + $1})}
        }
    }
}

这是编译器错误还是给定代码的结果?代码的其他变体(不止一种情况,打开给定的 OperationType 而不是 self)也导致了段错误 11。

编辑:删除.output(复制粘贴错误)

编辑 II:该函数的目的是为给定的 OperationType 返回一个闭包。例如,如果我的 OperationType 是加法,我希望它返回在数组中添加元素的闭包。当然,这是一种简化。可能会发生,我想要返回一个闭包,它结合了数组中的元素和一个二维数组(想想矩阵向量乘法与后来的点积)。

用法可能是,例如:

var op = OperationType.Addition
let f = op.operationForOperationType()
let arr: [Double] = [1, 5, 2]
f(arr, nil)
//-> 8

最佳答案

首先:如果编译器崩溃,您可能需要向苹果提交错误报告。

其次关于您的代码:我花了一段时间才弄清楚这里出了什么问题!您声明的返回类型不是闭包!

func operationForOperationType() -> ([Double], [[Double]]? -> Double) {

这一行意味着该函数返回一个元组,其中包含一个 [Double] 和一个类型为 [[Double]] 的闭包? -> 双。它返回一个输入为[Double][[Double]]? 的闭包并返回一个Double.

要更正返回类型以实际指定返回只是您必须编写的闭包:

func operationForOperationType() -> ([Double], [[Double]]?) -> Double {

注意移动结束 )!

现在我们可以进入返回值的实际实现了:

func operationForOperationType() -> ([Double], [[Double]]?) -> Double {
    switch self {
    case OperationType.Addition:
        return { (a, b) in a.reduce(0, combine: {$0 + $1})}
    }
}

由于我们将输入定义为 ([Double], [[Double]]?) 类型,一个元组,我们必须通过 $0.0 访问这些参数> 和 $0.1 或者我们编写 (a, b) in 将第一个元组值映射到 a 并将第二个值映射到 b.

现在一切都编译好了。我仍然不知道你想用 b 做什么,但这不关我的事 ;)

综合起来:

enum OperationType: String{
    case Addition = "∑"

    func operationForOperationType() -> ([Double], [[Double]]?) -> Double {
        switch self {
        case OperationType.Addition:
            return { (a, b) in a.reduce(0, combine: {$0 + $1})}
        }
    }
}

var op = OperationType.Addition
let f = op.operationForOperationType()
let arr: [Double] = [1, 5, 2]
f(arr, nil) // actually outputs 8 now

关于ios - 在 Xcode 中使用枚举编译 swift 文件时出现段错误 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37512108/

相关文章:

iphone - 同一个应用程序的多个版本可以同时提交给苹果审核吗?

ios - 创建需要(依赖于)另一个框架的框架

ios - 隐藏导航栏时的假状态栏颜色

ios - #import <libxml/tree.h> xcode 更新后找不到文件

objective-c - 如何在 Cocoa 框架中定义全局变量

Swift - 坐标不可用 : APIs deprecated as of iOS 7

ios - Xcode (Swift 3.0) - 在侧边栏菜单中切换 Controller 时如何保留值

objective-c - NSSearchField 在清除时调用操作两次

ios - 谷歌地图上的透明 UIView - Swift

arrays - 为什么在创建嵌套结构的数组时不能使用短数组构造函数语法?