假设我们有一个带有消息类型的简单枚举:enumMessageType{caseaudiocasephotocasetext}Handler类只处理特定类型的消息:classHandler{letallowed:[MessageType]init(_allowed:[MessageType]){self.allowed=allowed}funccanHandle(_messageType:MessageType)->Bool{returnallowed.contains(messageType)}}基本用法示例:lethandler=Handler([.audio,.photo])pri
有没有办法定义一个枚举,当从rawValue初始化时将默认为某个值而不是失败?在值可能出乎意料的情况下很有用(即服务器API错误) 最佳答案 你是说类似的意思吗?enumErrorCode:Int{caseNoErr=0,Err1,Err2,LastErr,DefaultErrinit(value:Int){if(value>LastErr.rawValue){self=.DefaultErr}else{self=ErrorCode(rawValue:value)!}}}leterror:ErrorCode=.LastErrleta
我想做的是创建一个协议(protocol)扩展来从枚举中获取一组原始值。例如说我有以下内容:enumTestType:String,EnumIteratable{caseunitTest="UnitTest"caseuiTest="UITest"}classEnumIterator:NSObject{classfunciterateEnum(_:T.Type)->AnyGenerator{vari=0returnanyGenerator{letnext=withUnsafePointer(&i){UnsafePointer($0).memory}returnnext.hashValue
有些Objective-C库的函数将整数枚举选项作为参数,但如果您需要默认选项,它们希望您传递0,这很典型。但在Swift中,这是不允许的,因为库指定了枚举类型。除了向库添加0枚举选项然后制作桥接代码以使其ObjC枚举在Swift中工作之外,是否有任何解决方法?这是一个在iPhone应用程序中使用SDWebImageManager的示例:SDWebImageManager.sharedManager().downloadWithURL(url,options:0,progress:nil){(image:UIImage!,error:NSError!,cacheType:SDImage
Swift中的枚举看起来真的很强大,但是......我一定是遗漏了一些关于我如何实现它的东西。我想为远程媒体播放器定义一些操作。似乎是枚举的一个很好的用例。我已经在Enum中定义了允许的消息类型,我想用它来获取修改后的参数字典。参数最终将作为JSON发送给播放器。目前,我遇到了Bracedblockofstatementsisanunusedclosure错误。这是相关代码:publicenumPlayerCommand{casePlaycasePausecaseLoad(String)funcparams(cmd_id:NSInteger)->[String:Any]{vardict
我在Swift中有这个枚举enumDirection:Int{caseLeft2Right=0,Right2Left}还有这个协议(protocol)@objcprotocolCellDelegate:NSObjectProtocol{optionalfunchas(direction:SwipeDirection)->Bool}我收到这个错误方法不能被标记为@objc,因为参数的类型不能在Objective-C中表示谁能告诉我为什么会出现此错误以及如何解决?谢谢! 最佳答案 @objc属性使协议(protocol)与Objecti
如果我声明一个enum像这样:enumKeys{casekey_onecasekey_two}我可以打印它,它会自动转换为String:print(Keys.key_one)//prints"key_one"如果我然后制作一个映射Strings的字典无论是什么(但为了简单起见,让我们再次选择Strings),我认为它应该能够通过使用Keys.key_one添加key作为关键,对吧?错了。varmyDict=[String:String]()///error:cannotsubscriptavalueoftype'[String:String]'withanindex///oftype'
我有一个枚举定义如下enumFruit{caseApple(associatedValue:String)caseOrange(associatedValue:String)}我有一个接受Fruit类型参数的函数funcprintNameOnly(fruit:Fruit){}在此函数中,我想将枚举大小写作为字符串获取,即我想获取字符串“Apple”或“Orange”,而不考虑关联值是什么。这对Swift来说可能吗?我显然可以编写一个函数,该函数采用fruit枚举并使用case语句返回一个字符串,但我试图找到一种方法来避免这种情况,因为我想要的字符串是枚举case名称本身。
我想做这样的事情:enumWeekDay{caseMonday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday}classPerson:Object{dynamicvarbirthday:WeekDay?=.Mondaydynamicvarid:String?=nildynamicvarbirthdayRaw:String?=niloverridestaticfuncprimaryKey()->String?{return"id"}}但是,我收到一个错误:Propertycannotbemarkeddynamicbecauseitst
我正在处理Swift中的枚举和子类化。每个child都有自己的新属性,这些属性必须存储在枚举中。这个枚举在母类中用一些值声明。我想为这个枚举增加一些值(value)。我不知道该怎么做,我试过了没有结果:extensionMotherClass{enumEnumeration{caseNewProperty}} 最佳答案 将项目添加到enum的唯一方法是将它们直接添加到它的声明中。您不能通过继承或任何其他扩展机制向enum添加更多项:enum必须在其声明时完全定义。 关于ios-在Swif