这篇文章主要讲解苹果Swift官方指南的第二章前四节的要点内容,如果想看完整的英文文档可以去苹果开发者页面下载。

Basic

声明常量let

声明变量var

注释依旧使用"//" "/**/", 注意这里"/**/"在Swift可以嵌套使用

表达式结尾不再有分号

整数

你可以声明为Int或者UInt,他们本身适应不同平台(64位, 32位),类似于NSInteger,NSUInteger

也可以直接声明为指定字节数的Int,如: Int8, Int32...

Float-pointing

Float,Double类型不是基本数据类型,而是一个Float-Pointing类型的数字,Float有32位,Double则64位表示。

类型推导

Swift中不再支持隐式转换,这样保证了安全性,所以在运算中也要将相同的类型进行运算。

var i1: UInt8 = 5
var i2: UInt16 = 2_000
var sum = UInt16(i1) + i2 //2001

别名

typealias关键字,类似于C系列里的typedef

例:
typealias MyInteger = Int
var mi: MyInteger = 8

Boolean

与oc不同,Swift的boolean为true,false.类型为Bool

另外if不再支持对0或者非0的判断,只判断Bool或者Optional类型

例如
var i = 1
if i {
//会引发编译错误
}

元组

Swift的元组这个十分灵活且好用的内容,它可以存在和适用于任何地方几乎。

var http404Error = ("error", 404)
var (statusMessage, statusCode) = http404Error

你可以通过statusMessage或者statusCode直接访问元组中的值,

更简洁的方式,可以是.0 .1来访问,例如

var code = http404Error.1 //404

其实在用playground的时候可以看到右边对元组的显示

该元组以(.0 " error ", .1 404 )结构进行存储所以可以直接访问

如果我们只想获取code忽略message可以这样进行访问

var (_ , code) = http404Error

这样就可以不去管message而直接拿到code了

文档中还讲解了一种带描述的初始化方式,如:

let http200Status = (statusCode: 200, description: "ok")

Optional与if语句

if语句支持对optional类型的判断,例如String的toInt()函数你跟进去会发现它的返回值是Int?

这样我们就可以在if中对其进行判断

let number = "1sdd"
var isIn = false
let convertN = number.toInt()
if convertN {
isIn = true
}
isIn //false

上面这个例子即使将赋值语句放入if的statement中也成立,

如果number这个str可以转成Int,则isIn为true

nil

nil与OC中的nil为空指针不同,Swift里的nil是一个NilType,

在Optional里,可以隐式的给其赋值为nil

var a: String?
这样a默认为nil

Assert

与C中assert,OC中NSAssert用法相似,

assert(statement, message)

statement为true断言方可通过

运算符

Swift支持大部分的基本的C运算符

注意的是,支持对float-pointing进行模运算(%)

另外提供了a..b,a...b区间的支持,前者为(a,b), 后者为(a, b]

一元运算符+除了进行数学运算外,也可以对String进行拼接

逻辑运算符仍然主要使用"&&" "||"

&&比||有着更高的优先级

字符串和字符

两个类:String,Character

在Swift中,String属于value type 传递时会被拷贝,而不是指传递引用。这样可以避免未知的修改。

声明空字符串

/*Empty String*/
var statement: String?
var empty = ""
var anoEmpty = String()
if empty.isEmpty {
statement = "empty string"
}
statement

isEmpty函数判断是否为空,常用的函数还有

countElements 返回字符个数

String没有length函数,有lengthOfBytesUsingEncoding()函数,来获取指定字符集下的字符串长度

遍历则直接使用for-in来获取每个字符

字符串的插入可以直接使用\(),比较不再使用isEqualToString: 而是通过"=="

前后缀函数 hasPrefix() hasSuffix()

大小写转换 uppercaseString() lowercaseString

在Swift里我们可以通过访问String的utf8,utf16,unicodeScalar来获取指定字符集下的unicode值

scalar的value为unicode值,直接访问则为字符

字符也可以使用一元运算符"+"来进行拼接

集合类型

Swift有两种基本的集合类型 Array,Dictionary

let声明则为常量,var声明则为变量,不再有Mutable类来维护可变类型

但是需要注意的是, Array常量已有下标的值仍可以修改,只不过不可以改变长度了。

两种数据结构都支持泛型

let i: Int = 4
let d: Int = 3 var arr: Array<Int> = [i, d]
var strings: String[] = ["123", "nihao"]
var anoStrings : Array<String> = strings

同样有isEmpty,count等函数

let isEmpty = arr.isEmpty  //false
let count = arr.count //2

数组的增删可以通过函数进行

append()

insert(atIndex:)

removeAtIndex()

removeLast()等

另外在结尾添加元素或者数组可以直接通过 "+="

var arr = [6,3]

arr += 5   //[6,3,5]
arr.insert(10, atIndex: 0) //[10,6,3,5]
arr.removeAtIndex(0) //[6,3,5]
arr.removeLast() //[6,3]

空数组和带参数初始化的数组

var emptyArr = Array<Int>()
var pArr = Array<Int>(count:3, repeatedValue:0)

数组属于有序存储,而字典则为无序

注意的是Swift里的字典中的Key可以为String,Int,Double和Bool类型

如:
var dict: Dictionary<Int, Int> = [4 : 8, 10 : 20]

这里的键值都为Int类型,这在OC里肯定是不允许的

Dictionary也有count函数记录键值对的个数

另外介绍一个updateValue(forKey:)函数

该函数返回值为valueType value?

如果参数key在字典中并没有则会给字典添加新键值对,但是返回值为nil。如果有键,则讲新值赋进去,返回旧值。

dict.updateValue(50, forKey: 10)   //20
dict //[4 : 8,10 : 50]
dict.updateValue(100, forKey: 50) //nil
dict //[4 : 8, 10 : 50, 50 : 100]

遍历字典可以结合Tuple元组来实现

for (key, value) in dict {

//do someting with key and value...

}
遍历键或者值则使用dict.keys dict.values来访问

for key in dict.keys {

//do someting with key...

}

空字典的创建则类似于数组

var emptyDict = Dictionary<String, String>()

Swift的基础,操作符,字符串和集合类型的更多相关文章

  1. Python基础-字符串、集合类型、判断、深拷贝与浅拷贝、文件读写

    字符串 1.定义三个变量: 2.交换两个变量值 1)引入第三个变量: 2)Python引入第三方变量: 3)不引入第三方变量: 3. isalpha 是否是汉字或字母 4.Isalnum  是否是汉字 ...

  2. python基础:映射和集合类型

    python字典的迭代器遍历 字典有一个方法可以返回该字典的迭代器,这个方法就是: dict. iteritems() 当在字典中增加或者删除字典entry的时候,迭代器会失效的,类似于C++的stl ...

  3. Python中的集合类型分类和集合类型操作符解析

    集合类型    数学上,把set称作由不同的元素组成的集合,集合(set)的成员通常被称作集合元素(set elements).    Python把这个概念引入到它的集合类型对象里.集合对象是一组无 ...

  4. Swift3.0P1 语法指南——集合类型

    原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...

  5. Swift5 语言指南(七) 集合类型

    Swift提供三种主要的集合类型,称为数组,集合和字典,用于存储值集合.数组是有序的值集合.集是唯一值的无序集合.字典是键值关联的无序集合. Swift中的数组,集合和字典总是清楚它们可以存储的值和键 ...

  6. redis数据类型-集合类型

    集合类型 在集合中的每个元素都是不同的,且没有顺序. 一个集合类型(set)键可以存储至多2 32-1个(相信这个数字对大家来说已经很熟悉了)字符串. 集合类型的常用操作是向集合中加入或删除元素.判断 ...

  7. { MySQL基础数据类型}一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型

    MySQL基础数据类型 阅读目录 一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型 一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己 ...

  8. 浅谈Swift集合类型

    Swift 的集合表现形式由数组和字典组成.它可以完美的存储任何呢想存储的东西. 数组是一个同类型的序列化列表集合,它用来存储相同类型的不同值.字典也是一个数组,但它的存值方式类似于Map,通过一对一 ...

  9. 6.Swift教程翻译系列——Swift集合类型

    英文版PDF下载地址http://download.csdn.net/detail/tsingheng/7480427 Swift提供数组和字典两种集合类型.用来存储很多值的情况.数组有序的存储一组同 ...

随机推荐

  1. 下拉框Html.DropDownList 和DropDownListFor 的经常用法

    一.非强类型: Controller: ViewData["AreId"] = from a in rp.GetArea()                             ...

  2. keil将程序装入外部FLASH具体解释

    在实际项目中,常常出现芯片的内部FLASH空间不够的情况,这就须要将程序分一部分装到外部FLASH中. 为了让大家能少走些弯路,在这里把我在这当中遇到的一些问题和经验教训给大家分享一下. 仅供參考,假 ...

  3. VB中DateDiff 函数解释

    VB中DateDiff 函数使用方法 DateDiff (interval, Date1 , Date2[,firstweekofyear[,firstweekofyear]])  返回一个Varia ...

  4. rz/sz上传下载

    z(Zmodem文件传输协议) rz  文件上传(Receive Zmodem)  rz sz  文件下载(Send Zmodem)  sz filename rz/sz工具需要自己安装

  5. C#解决MDI窗体闪屏的方法

    最近从师兄手上接了一个C#的项目,需要用到MDI窗体,可是每当我显示子窗体的时候会有一次“闪烁”,很明显,看起来非常不爽,查找许久,知道是每次在show()子窗体的时候都会调用子窗体构造函数重绘窗体, ...

  6. 自己对WSO2 ESB 见解

    这周没想到要更新什么内容,就把我最近工作接触的WSO2 ESB简单介绍下吧.     前提: 一切文档,知识都要与官方文档为准. WSO2 ESB: http://wso2.com/products/ ...

  7. 不到30行JS代码实现的Excel表格

    不到30行JS代码实现的Excel表格,jQuery并非不可替代 某国外程序员展示了一个由原生JS写成不依赖第三方库的,Excel表格应用,有以下特性: 由不足30行的原生JavaScript代码实现 ...

  8. 高可用集群(HA)之Keeplived原理+配置过程

    原理--> 通过vrrp协议,定义虚拟路由,在多个服务节点上进行转移. 通过节点优先级,将初始虚拟路由到优先级高的节点上,checker工作进程检测到主节点出问题时,则降低此节点优先级,从而实现 ...

  9. ACM题目推荐(刘汝佳书上出现的一些题目)[非原创]

    原地址:http://blog.csdn.net/hncqp/article/details/1758337 推荐一些题目,希望对参与ICPC竞赛的同学有所帮助. POJ上一些题目在http://16 ...

  10. 利用raspberry pi搭建typecho笔记(一) nginx PHP server quick start

    前言 因为一直对linux学习很有兴趣,就拿手头的树莓派做了实验,搭建一个简易的php服务器用来跑typecho. 但是过程却是异乎寻常的艰辛,几乎每一步能卡住得地方都卡住了.而且typecho的资料 ...