服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Swift - Swift编程中的switch...case语句实例解析

Swift编程中的switch...case语句实例解析

2020-12-25 15:57Walden_tinghou Swift

这篇文章主要介绍了Swift编程中的switch...case语句实例解析,其中重点还是对于fallthrough关键字用法的讲解,需要的朋友可以参考下

Swift中的switch...case语句可以判断对象类型, Objective-C中则必须是整数。
不可以穿透,可以不写break,

?
1
2
3
4
5
6
7
8
9
10
11
var rank = "A"
switch rank{
  case "A": //相当于if
    print("优")
  case "B": // 相当于else if
    print("优")
  case "C": // 相当于else if
    print("优")
  default: // 相当于else
    print("没有评级")
}


因为不能穿透所以不能这么写

?
1
2
3
4
5
6
7
8
9
10
var rank1 = "A"
switch rank1{
  case "A":
  case "B":
    print("优")
  case "C":
    print("优")
  default:
    print("没有评级")
}


只能这么写

?
1
2
3
4
5
6
7
8
9
var rank1 = "A"
switch rank1{
  case "A", "B": // 注意OC不能这样写
    print("优")
  case "C":
    print("差")
  default:
    print("没有评级")
}

不能不写default

?
1
2
3
4
5
6
7
8
9
var rank2 = "A"
switch rank2{
  case "A":
    print("优")
  case "B":
    print("良")
  case "C":
    print("差")
}

default位置只能在最后

?
1
2
3
4
5
6
7
8
9
10
11
var rank3 = "A"
switch rank3{
  default:
    print("没有评级")
  case "A":
    print("优")
  case "B":
    print("良")
  case "C":
    print("差")
}

在case中定义变量不用加大括号

?
1
2
3
4
5
6
7
8
9
10
11
12
var rank4 = "A"
switch rank4{
  case "A":
    var num = 10
    print("优")
  case "B":
    print("良")
  case "C":
    print("差")
  default:
    print("没有评级")
}

区间和元祖匹配

?
1
2
3
4
5
6
7
8
9
var num = 10;
switch num{
  case 1...9:
    print("个位数")
  case 10...99:
    print("十位数")
  default:
    print("其它数")
}
?
1
2
3
4
5
6
7
8
9
10
11
var point = (10, 15)
switch point{
  case (0, 0):
    print("坐标在原点")
  case (1...10, 10...20): // 可以在元祖中再加上区间
    print("坐标的X和Y在1~10之间")
  case (_, 0): // X可以是任意数
    print("坐标的X在X轴上")
  default:
    print("Other")
}

值绑定

?
1
2
3
4
5
6
7
8
9
10
11
var point = (1, 10)
switch point{
  case (var x, 10): // 会将point中X的值赋值给X
    print("x= \(x)")
  case (var x, var y): // 会将point中XY的值赋值给XY
    print("x= \(x) y= \(y)")
  case var( x, y):
    print("x= \(x) y= \(y)")
  default:
    print("Other")
}

根据条件绑定

?
1
2
3
4
5
6
7
8
var point = (100, 10)
switch point{
  // 只有where后面的条件表达式为真才赋值并执行case后的语句
  case var(x, y) where x > y:
    print("x= \(x) y= \(y)")
  default:
    print("Other")
}

fallthrough关键字
Swift语言中的switch不会从上一个case分支落入到下一个case分支中。相反,只要第一个匹配到的case分支完成了它需要执行的语句,整个switch代码块完成了它的执行。相比之下,C语言要求你显示的插入break语句到每个switch分支的末尾来阻止自动落入到下一个case分支中。Swift语言的这种避免默认落入到下一个分支中的特性意味着它的switch 功能要比C语言的更加清晰和可预测,可以避免无意识地执行多个case分支从而引发的错误。
 
如果你确实需要C风格的落入(fallthrough)的特性,你可以在每个需要该特性的case分支中使用fallthrough关键字。下面的例子使用fallthrough来创建一个数字的描述语句。

?
1
2
3
4
5
6
7
8
9
10
11
let integerToDescribe = 5
var description = "The number \(integerToDescribe) is"
switch integerToDescribe {
case 2, 3, 5, 7, 11, 13, 17, 19:
  description += " a prime number, and also"
  fallthrough
default:
  description += " an integer."
}
println(description)
// prints "The number 5 is a prime number, and also an integer."

这个例子定义了一个String类型的变量description并且给它设置了一个初始值。函数使用switch逻辑来判断integerToDescribe变量的值。当integerToDescribe的值属于列表中的质数之一时,该函数添加一段文字在description后,来表明这个是数字是一个质数。然后它使用fallthrough关键字来"落入"到default分支中。default分支添加一段额外的文字在description的最后,至此switch代码块执行完了。
 
如果integerToDescribe的值不属于列表中的任何质数,那么它不会匹配到第一个switch分支。而这里没有其他特别的分支情况,所以integerToDescribe匹配到包含所有的default分支中。
 
当switch代码块执行完后,使用println函数打印该数字的描述。在这个例子中,数字5被准确的识别为了一个质数。
 
NOTE:fallthrough关键字不会检查它下一个将会落入执行的case中的匹配条件。fallthrough简单地使代码执行继续连接到下一个case中的执行代码,这和C语言标准中的switch语句特性是一样的。

延伸 · 阅读

精彩推荐
  • Swift详解Swift 之clipped是什么如何用

    详解Swift 之clipped是什么如何用

    这篇文章主要介绍了详解Swift 之clipped是什么如何用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    iCloudEnd8532021-05-28
  • SwiftSwift算法之栈和队列的实现方法示例

    Swift算法之栈和队列的实现方法示例

    Swift语言中没有内设的栈和队列,很多扩展库中使用Generic Type来实现栈或是队列。下面这篇文章就来给大家详细介绍了Swift算法之栈和队列的实现方法,需要...

    李峰峰10002021-01-05
  • SwiftSwift 基本数据类型详解总结

    Swift 基本数据类型详解总结

    在我们使用任何程序语言编程时,需要使用各种数据类型来存储不同的信息。变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中。在声明...

    Lucky_William4672021-12-26
  • SwiftSwift网络请求库Alamofire使用详解

    Swift网络请求库Alamofire使用详解

    这篇文章主要为大家详细介绍了Swift网络请求库Alamofire的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    lv灬陈强56682021-01-06
  • Swift分析Swift性能高效的原因

    分析Swift性能高效的原因

    绝大多数公司选择Swift语言开发iOS应用,主要原因是因为Swift相比Objc有更快的运行效率,更加安全的类型检测,更多现代语言的特性提升开发效率;这一系...

    louis_wang9092021-01-16
  • SwiftSwift中排序算法的简单取舍详解

    Swift中排序算法的简单取舍详解

    对于排序算法, 通常简单的, 为大家所熟知的有, 选择排序, 冒泡排序, 快速排序, 当然还有哈希, 桶排序之类的, 本文仅比较最为常见的选择, 冒泡和快排,文...

    Castie111012021-01-10
  • Swift浅谈在Swift中关于函数指针的实现

    浅谈在Swift中关于函数指针的实现

    这篇文章主要介绍了浅谈在Swift中关于函数指针的实现,是作者根据C语言的指针特性在Swifft中做出的一个实验,需要的朋友可以参考下...

    Swift教程网4372020-12-21
  • Swiftswift相册相机的权限处理示例详解

    swift相册相机的权限处理示例详解

    在iOS7以后要打开手机摄像头或者相册的话都需要权限,在iOS9中更是更新了相册相关api的调用,那么下面这篇文章主要给大家介绍了关于swift相册相机权限处...

    hello老文12682021-01-08