• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >swift > Swift心得笔记之运算符

Swift心得笔记之运算符

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了taylor swift,swift,swift code是什么意思,taylor swift好听的歌,taylor swift演唱会等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

空值合并运算符和区间运算符

今天主要看的内容是 Swift 中的基本运算符。记录一下。

Nil Coalescing Operator

a ?? b 中的 ?? 就是是空值合并运算符,会对 a 进行判断,如果不为 nil 则解包,否则就返回 b 。

var a: String? = "a"
var b: String? = "b"
var c = a ?? b   // "a"
a = nil
c = a ?? b     // "b"
b = nil
c = a ?? b ?? "c"  // "c"
</div>

使用的时候有以下两点要求:

a 必须是 optional 的
b 必须和 a 类型一致
也就是说,a 一定要有被备胎的可能,b 一定要有做备胎的资格。

其实也就是对三目运算符的简写:

a != nil ? a! : b 或者 a == nil ? b : a!
</div>

当然你也可以通过自定义运算符来实现:

infix operator ||| {}

func |||<T> (left: T?, right: T) -> T {
  if let l = left { 
    return l 
  }
  return right
}

var a:String?
var b = "b"
var c = a ||| b

</div>

C# 中也有个 ?? ,感兴趣的可以去了解一下。

Range Operator

区间运算符分为闭区间 (...) 和左闭右开区间 (..<) 两种,前者是算头算尾,后者是算头不算尾。

可以应用在 switch 中:

switch aNumber
{
case 0...5:
  println("This number is between 0 and 5")
case 6...10:
  println("This number is between 6 and 10")
default:
  println("This number is not between 0 and 10")
}
</div>

区间运算符其实返回的是一个 Range<T> 对象,是一个连续无关联序列索引的集合。

话说以前左闭右开是 .. ,这样和 Ruby 的就刚好完全相反了。。。

不过有人就是想用 .. ,那么可以这样自己写一个:

infix operator .. { associativity none precedence 135}

func .. (lhs: Int, rhs: Int) -> Range<Int> {
  return lhs..<rhs
}

for i in 0..10 {
  println("index \(i)")
}

</div>

你也可以用 generate() 来遍历:

var range = 1...4
var generator = range.generate()  // {startIndex 1, endIndex 5}
generator.next() // 1
generator.next() // 2
generator.next() // 3
generator.next() // 4
generator.next() // nil
</div>

.generate() 返回一个 RangeGenerator<T> 的结构体,可以用来遍历 Range<T> 中的值。

以前还有个 (5...1).by(-1) 的用法,不过现在好像没用了。

区间运算符返回的是一个 ClosedInterval 或者 HalfOpenInterval 的东西,类型只要是 Comparable 就可以了。所以我们也可以把 String 放到 ... 里。

比如猫神的 Swifter Tips 中有一章的代码如下,通过 String 的 ClosedInterval 来输出字符串中的小写字母:

let test = "Hello"
let interval = "a"..."z"

for c in test {
  if interval.contains(String(c)) {
    println("\(c)")
  }
}

</div>

SubString

Ruby 中用点点点来获取 SubString 的方法很方便:

2.1.3 :001 > a="abc"
 => "abc"
2.1.3 :002 > a[0]
 => "a"
2.1.3 :003 > a[0..1]
 => "ab"
</div>

而 Swift 中的 ClosedInterval 是没有 subscript 的。但是任性的我们就是要用 [1...3] 这种方法怎么办呢?
自己动手丰衣足食,写个 extension 吧,只需要加个 subscript 就可以了,然后下标的类型是 Range<Int> 就可以了:

extension String {
  subscript (r: Range<Int>) -> String {
    get {
      let startIndex = advance(self.startIndex, r.startIndex)
      let endIndex = advance(startIndex, r.endIndex - r.startIndex)

      return self[Range(start: startIndex, end: endIndex)]
    }
  }
}

var s = "Hello, playground"

println(s[0...5]) // ==> "Hello,"
println(s[0..<5]) // ==> "Hello"

</div>

如果要搜索目标字符串之后再截取 substring 可以这样:

let name = "Joris Kluivers"

let start = name.startIndex
let end = find(name, " ")

if (end != nil) {
  let firstName = name[start..<end!]
} else {
  // no space found
}
</div>

以上所述就是本文的全部内容了,希望大家能够喜欢。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Swift 环境搭建
  • Swift 基本语法
  • Swift 数据类型
  • Swift 变量
  • Swift 常量
  • Swift 运算符
  • Swift 条件语句
  • Swift 循环
  • Swift 字符串
  • Swift 字符(Character)

相关文章

  • 2017-05-28Swift能代替Objective-C吗?
  • 2017-05-28JVM教程之内存管理和垃圾回收(三)
  • 2017-05-28Mybatis中 SQL语句复用
  • 2017-05-28微信开发--自定义菜单查询返码乱码的解决方法
  • 2017-05-28Swift 3.0基础学习之闭包
  • 2017-05-28完美解决gson将Integer默认转换成Double的问题
  • 2017-05-28Swift编程之枚举类型详解
  • 2017-05-28Swift编程中的初始化与反初始化完全讲解
  • 2017-05-28Swift使用WKWebView在iOS应用中调用Web的方法详解
  • 2017-05-28Swift自定义iOS中的TabBarController并为其添加动画

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Swift 可选链
    • Swift代码实现冒泡排序算法的简单实例
    • Swift 3.0基础学习之扩展
    • Swift中闭包实战案例详解
    • Objective-c代码如何移植为Swift代码 Objective-c代码转移到Swift过程介绍
    • 探讨Swift数组和字典
    • 简单理解插入排序算法及Swift版的代码示例
    • Swift免费短信验证码实现及动态倒计时功能
    • 苹果公司编程语言Swift语言简介
    • 解析Swift中的泛型支持与使用

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有