我想检查我的输入是否有一个rangeOfString必须要检查很多不同的字符串.

基本上这个if语句,但使用开关来检查不同字符串的大列表

if (input.rangeOfString("lol") != nil) {
    println("yes")
}

我试过这样做但是没有用.

switch input {
case rangeOfString("lol"):
    println("lol")
case rangeOfString("dw"):
    println("dw")
default:
    println("Default")
}

解决方法

虽然其他答案可能是正确的,如果是一个更好的方式,你可以通过英雄滥用〜=运算符做这样的事情:
import Foundation

struct Substring {
    let substr: String
    init(_ substr: String) { self.substr = substr }
}

func ~=(substr: Substring,str: String) -> Bool {
    return str.rangeOfString(substr.substr) != nil
}

let input = "contains wat"

switch input {
case Substring("lol"),Substring("wat"):
    println("huh?")   // this one is picked
case Substring("dw"):
    println("dw")
// you can also mix and match
case "Explicit full string":
    println("matches whole string")
default:
    println("Default")
}

Swift中的switch语句可以通过〜=运算符的重载来扩展.例如,这是有效的原因:

switch 2.5 {
case 0...5: println("between nought and five")
default:    println("not in range")
}

是因为有一个〜=运算符的定义,它将任何类型的Comparable类型与一个区间匹配:

func ~=<I : IntervalType>(pattern: I,value: I.Bound) -> Bool

在这里,通过创建一种新类型的Substring,我创建了一种将字符串与子字符串匹配的方法.

理论上,您可以跳过Substring类型的创建并执行以下操作:

func ~=(substr: String,str: String) -> Bool {
    return str.rangeOfString(str) != nil
}

let input = "contains lol"

switch input {
case "lol":
    println("lol")
case "dw":
    println("dw")
default:
    println("Default")
}

这可能有用,但这是一个坏主意,因为现在你已经改变了字符串上的开关普遍工作的方式,这样部分匹配总是正确的,这可能会导致代码中其他地方出现一些令人不快和意外的行为.

ios – .rangeOfString()与Swift中的开关的更多相关文章

  1. ios – .rangeOfString()与Swift中的开关

    我想检查我的输入是否有一个rangeOfString必须要检查很多不同的字符串.基本上这个if语句,但使用开关来检查不同字符串的大列表我试过这样做但是没有用.解决方法虽然其他答案可能是正确的,如果是一个更好的方式,你可以通过英雄滥用=运算符做这样的事情:Swift中的switch语句可以通过=运算符的重载来扩展.例如,这是有效的原因:是因为有一个=运算符的定义,它将任何类型的Comparable类

  2. php – 当我使用它时,为什么SimpleXML会将我的数组更改为数组的第一个元素?

    这是我的代码:输出:为什么它只输出[0]而不是整个数组?

  3. 使用jquery获取全屏模式到我的浏览器

    如何使用Javascript/JQuery代码进入全屏模式?目标是进入全屏模式,就像在浏览器中按F11,但是以编程方式。解决方法您可以使用没有jQuery的香草JavaScript激活全屏模式。有一点很重要,您只能在用户执行操作时请求全屏模式。

  4. 基于Cocos2d-x的英雄联盟皮肤选择菜单

    important;font-size:1em!important;min-height:inherit!important;color:black!important">);listener->onTouchEnded=CC_CALLBACK_2(LOLMenu::onTouchEnded,monospace!important;font-size:1em!important;min-height:inherit!important;color:black!important">);getEventdi

  5. 基于cocos2dx的英雄联盟皮肤选择菜单

    最终效果图英雄联盟皮肤选择设计说明实现目标所需要的动作移动(Moveto),伸缩(Scaleto),倾斜(OrbitCamera)实现目标所需要函数(这是一个数学函数)x/(x+a)其中a为常量,用来计算上面三个动作的值大小与原版Menu不同,大小不是全屏的,默认是屏幕的(2/3),可以通过setContentSize()函数设置_index变量将所有的菜单项平铺构成一个长方形,_index表示目

  6. cocos2dx3.2开发 RPG《Flighting》十三让英雄炫酷点—技能以及技能效果

    将技能之前,先看SkillMessage还记得XXXMessage是什么小编吧。对了,就是保存从excel表读取的数据的一种对象。SkillMessage的各个属性解释已经标出来了,相应的excel表自己构造就可以吧。现在大家应该可以看到技能框了第二步:技能的效果实现前面说了,每个英雄的每个技能都是不一样的,多姿多彩。前面的技能框已经帮我们触发了skill()接口了我们看看skill接口的实现SkillImp是什么小编?

  7. 在R中写出大数据帧作为json的最快方法是什么?

    我需要在R中将大数据帧写为JSON.我正在使用rjson包.下面的方法很慢……所以我尝试了这个:由于toJSON()无法处理长度非常长的字符串,因此会出现问题.所以我想一次写出我的数据表块.推荐的方法是什么?如果它涉及split()你能提供一些伪代码吗?

随机推荐

  1. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. iOS – genstrings:无法连接到输出目录en.lproj

    使用我桌面上的项目文件夹,我启动终端输入:cd然后将我的项目文件夹拖到终端,它给了我路径.然后我将这行代码粘贴到终端中找.-name*.m|xargsgenstrings-oen.lproj我在终端中收到此错误消息:genstrings:无法连接到输出目录en.lproj它多次打印这行,然后说我的项目是一个目录的路径?没有.strings文件.对我做错了什么的想法?

  3. iOS 7 UIButtonBarItem图像没有色调

    如何确保按钮图标采用全局色调?解决方法只是想将其转换为根注释,以便为“回答”复选标记提供更好的上下文,并提供更好的格式.我能想出这个!

  4. ios – 在自定义相机层的AVFoundation中自动对焦和自动曝光

    为AVFoundation定制图层相机创建精确的自动对焦和曝光的最佳方法是什么?

  5. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  6. ios – 在没有iPhone6s或更新的情况下测试ARKit

    我在决定下载Xcode9之前.我想玩新的框架–ARKit.我知道要用ARKit运行app我需要一个带有A9芯片或更新版本的设备.不幸的是我有一个较旧的.我的问题是已经下载了新Xcode的人.在我的情况下有可能运行ARKit应用程序吗?那个或其他任何模拟器?任何想法或我将不得不购买新设备?解决方法任何iOS11设备都可以使用ARKit,但是具有高质量AR体验的全球跟踪功能需要使用A9或更高版本处理器的设备.使用iOS11测试版更新您的设备是必要的.

  7. 将iOS应用移植到Android

    我们制作了一个具有2000个目标c类的退出大型iOS应用程序.我想知道有一个最佳实践指南将其移植到Android?此外,由于我们的应用程序大量使用UINavigation和UIView控制器,我想知道在Android上有类似的模型和实现.谢谢到目前为止,guenter解决方法老实说,我认为你正在计划的只是制作难以维护的糟糕代码.我意识到这听起来像很多工作,但从长远来看它会更容易,我只是将应用程序的概念“移植”到android并从头开始编写.

  8. ios – 在Swift中覆盖Objective C类方法

    我是Swift的初学者,我正在尝试在Swift项目中使用JSONModel.我想从JSONModel覆盖方法keyMapper,但我没有找到如何覆盖模型类中的Objective-C类方法.该方法的签名是:我怎样才能做到这一点?解决方法您可以像覆盖实例方法一样执行此操作,但使用class关键字除外:

  9. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  10. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

返回
顶部