Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么ReturnType在这个Swift函数中不起作用?_Swift - Fatal编程技术网

为什么ReturnType在这个Swift函数中不起作用?

为什么ReturnType在这个Swift函数中不起作用?,swift,Swift,我正在使用Xcode 10.2.1中的Swift 5 我在UInt8 编译器在第5行中抱怨,void函数中有意外的非void返回值 返回类型已正确定义,如果对行return“\(opCode)”进行了注释,它工作正常,返回在最后一行return“\(opCode.NOP)中,我使用“\(opCode.NOP)”来避免向枚举中添加另一个变量,但它是一个常规字符串 如果我将行更改为return”“,则错误将继续,因此它与OpCode枚举无关 extension UInt8 { func op

我正在使用Xcode 10.2.1中的Swift 5

我在
UInt8

编译器在第5行中抱怨,void函数中有意外的非void返回值

返回类型已正确定义,如果对行
return“\(opCode)”
进行了注释,它工作正常,返回在最后一行
return“\(opCode.NOP)
中,我使用
“\(opCode.NOP)”
来避免向枚举中添加另一个变量,但它是一个常规字符串

如果我将行更改为
return”“
,则错误将继续,因此它与
OpCode
枚举无关

extension UInt8 {
    func opCode() -> String {
        OpCode.allCases.forEach { opCode in
            if self == opCode.uint8 {
                return "\(opCode)"  //Unexpected non-void return value in void function
                //return ""  // Error persists
            }
        }
        return "\(OpCode.NOP)"
    }
}

您不能在
forEach
的void返回类型中返回值,请重试

extension UInt8 {
    func opCode() -> String { 
       if let item = OpCode.allCases.first(where:{ self == $0.uint8 }) { 
         return "\(item)"
       } 
        return "\(OpCode.NOP)"
    }
}

您不能从闭包中返回。而是将字符串传递给闭包外的变量。然后不要使用forEach,而是使用for循环。Thx@arvidurs。我现在看到它不相关,但是:这似乎违反了单一责任原则。
UInt8
的工作是存储数值,而不是记住它是什么操作代码在某些任意体系结构中显示(不能添加任何其他体系结构)。最好为此单独创建一个类型。嗨@Alexander。我有一个typealias到Binary8的类型。我在发布问题时放了UInt8以避免混淆…现在,在阅读您的评论后,我认为最好将typealias操作码命名为UInt8,字符串表示可以称为助记符()@eharo2我甚至不认为类型别名是合适的,因为它基本上仍然是相同的类型(在这方面,任何导入代码的人都会在每个
UInt8
上显示一个奇怪的
opCode()
方法。如果没有类似Haskell的特性,应该使用包装结构。或者
return”\(opCode.allCases.first)(其中:{self==$0.uint8})??OpCode.NOP)“