我在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)"
    }
}

09-06 11:13