草庐IT

swift - Swift 中的枚举模式匹配

我刚开始学习Swift并试图理解模式匹配。我找到了下一个例子:privateenumEntities{caseOperand(Double)caseUnaryOperation(Double->Double)caseBinaryOperation((Double,Double)->Double)}后来我使用模式匹配来找出实体的类型funcevaluate(entity:Entities)->Double?{switchentity{case.Operand(letoperand):returnoperand;case.UnaryOperation(letoperation):retur

ios - Swift 枚举值不可访问

这个问题在这里已经有了答案:Whycan'tIuse'Type'asthenameofanenumembeddedinastruct?(2个答案)关闭7年前。我有以下类,其中定义了枚举:publicclassMyError:NSError{publicenumType:Int{caseConnectionErrorcaseServerError}init(type:Type){super.init(domain:"domain",code:type.rawValue,userInfo:[:])}}当我稍后在我的测试中尝试检查错误时,例如:expect(error.code).to(eq

swift - 字符串类型的枚举与具有静态常量的结构

似乎当需要使用枚举(字符串类型)时,也可以使用使用静态字段的结构来实现。例如enumTest:String{caseTestCase1caseTestCase2caseTestCase3}或structTest{staticletTestCase1="TestCase1"staticletTestCase2="TestCase2"staticletTestCase3="TestCase3"}什么时候枚举方法优于其他方法,反之亦然? 最佳答案 它们都非常可行。我曾经争辩说枚举方法不太灵活,因为你必须明确地询问原始值才能到达底层字符串,

swift - 枚举的自省(introspection)和迭代

是否有可能以编程方式找出Swift2中枚举有多少个“案例”并对其进行迭代?此代码无法编译,但它让您了解我要实现的目标:enumHeaderStyles{caseh1caseh2caseh3}foriteminHeaderStyles{print(item)} 最佳答案 遍历所有情况的最简单方法是制作一个计算属性,该属性返回它们的Array:enumSomeEnum{caseZero,One,TwostaticvarallCases:[SomeEnum]{return[.Zero,.One,.Two]}}如果你想要一个自动数组,你可以

swift - 将多个枚举与单个 guard 案例匹配?

我想匹配多个枚举并且有这样的东西:guardcase.north=$0,case.south=$0else{return}有没有办法将其压缩为这样的单个语句?guardcase(.north,.south)=$0else{return}上面没有编译,但希望我能做这样的事情。有替代方案吗? 最佳答案 您可以将所需的案例放入文字数组中,并使用contains来测试匹配:guard[.north,.south].contains($0)else{return} 关于swift-将多个枚举与单个

swift - 嵌套类中名为 `Type` 的枚举失败

出于某种原因,具有名为Type的嵌套枚举的嵌套类不能很好地与swift编译器配合使用。classA{classB{enumType{caseOnecaseTwo}letmyC:Typeinit(myC:Type){self.myC=myC}}funcgetB(myC:B.Type)->B{returnB(myC:myC)//ERROR1}}leta=A()letb=a.getB(.Two)//ERROR2上面的代码产生了两个错误:'A.B.Type'isnotconvertibleto'A.B.Type'和'A.B.Type.Type'doesnothaveamembernamed'T

swift - 如何在 IF 条件下获取枚举的参数值?

这个问题在这里已经有了答案:Getassociatedvaluefromenumerationwithoutswitch/case(2个答案)关闭6年前。这个怎么写switchparameter{case.CaseA(letvalueA):print(valueA)}作为If条件语句?这不起作用:ifparameter==.CaseA(letvalueA){print(valueA)}

swift - Swift 中的字符串到枚举映射

我在Swift中定义了一个枚举,如下所示:publicenumCommand:String{casefirst="FirstCommand"casesecond="SecondCommand"......caselast="lastCommand"}现在我从服务器收到一个命令字典,并从中提取命令字符串。命令字符串通常是命令枚举中的原始值之一,有时也可能是枚举之外的命令(例如,在客户端/服务器的future版本中引入了新命令,但客户端仍然很旧)。在这种场景下,Swift3中switch语句的使用方法是什么?在switch的默认情况下,如何对命令字符串进行类型转换以枚举和处理未知命令?

swift - 在类型中找不到枚举大小写

enumOperator:Character{caseSubstract="-"caseAdd="+"caseMultiply="*"caseDivide="/"}我有上面的枚举和下面声明的函数,它检查我们是否有有效的运算符。例如isOperator("+")funcisOperator(_symbol:Character)->Operator?{letop=Operator(rawValue:symbol)switchop{case.Substract,.Add,.Multiply,.Divide:returnopdefault:returnnil}}编译器在这里返回的是“EnumC

swift - Swift 中泛型的递归枚举

我是Swift的新手。我试图用递归枚举和泛型实现二叉树:enumBinaryTree{indirectcaseNode(T,BinaryTree,BinaryTree)caseNothing}funcinorder(_root:BinaryTree)->[T]{switchroot{case.Nothing:return[]caselet.Node(val,left,right):returninorder(left)+[val]+inorder(right)}}这是我得到的错误:$swiftADT.swiftADT.swift:83:20:error:cannotconvertval