为什么ReturnType在这个Swift函数中不起作用?
我正在使用Xcode 10.2.1中的Swift 5 我在为什么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
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)“