博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift的基础,操作符,字符串和集合类型
阅读量:6089 次
发布时间:2019-06-20

本文共 3749 字,大约阅读时间需要 12 分钟。

这篇文章主要解说苹果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 = 5var i2: UInt16 = 2_000var sum = UInt16(i1) + i2  //2001

别名

typealiaskeyword,类似于C系列里的typedef
例:
typealias MyInteger = Intvar mi: MyInteger = 8

Boolean

与oc不同,Swift的boolean为true。false.类型为Bool
另外if不再支持对0或者非0的推断。仅仅推断Bool或者Optional类型
比如
var i = 1if 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 = falselet 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 = 4let d: Int = 3var arr: Array
= [i, d]var strings: String[] = ["123", "nihao"]var anoStrings : Array
= strings
相同有isEmpty,count等函数
let isEmpty = arr.isEmpty  //falselet 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
()var pArr = Array
(count:3, repeatedValue:0)
数组属于有序存储。而字典则为无序
注意的是Swift里的字典中的Key能够为String。Int,Double和Bool类型
如:
var dict: Dictionary
= [4 : 8, 10 : 20]
这里的键值都为Int类型,这在OC里肯定是不同意的
Dictionary也有count函数记录键值对的个数
另外介绍一个updateValue(forKey:)函数
该函数返回值为valueType value?
假设參数key在字典中并没有则会给字典加入新键值对,可是返回值为nil。

假设有键,则讲新值赋进去。返回旧值。

dict.updateValue(50, forKey: 10)   //20dict   //[4 : 8,10 : 50]dict.updateValue(100, forKey: 50)   //nildict   //[4 : 8, 10 : 50, 50 : 100]
删除键值对则使用removeValueForKey()函数
遍历字典能够结合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
()
以上为这篇博客所有内容,欢迎指正和讨论。

转载地址:http://zrpwa.baihongyu.com/

你可能感兴趣的文章
lvm原理与使用
查看>>
redhat 5.8 简单安装awstats 7.0
查看>>
关于linux的crond定时任务的一些常见问题
查看>>
Apache 源码包安装
查看>>
windows下使用net-snmp实现agent扩展(四)
查看>>
九宫格、函数、高阶函数、生成式、生成器,passwd的uid排序
查看>>
Linux用户、用户组以及权限
查看>>
年底了,要慎重,这是一个不太好的信号....
查看>>
oracle 10R2的使用以及常见问题
查看>>
DEVEXPRESS 随记
查看>>
抓取今日头条部分信息
查看>>
PHP 数组用法
查看>>
kickstart+dhcp+vsftp+tftp
查看>>
SpringMvc 参数接收
查看>>
我的友情链接
查看>>
[转]Linux服务器性能评估与优化(二)
查看>>
js控制media player参数
查看>>
安装ESXI 5.5卡在LSI_MR3.V00解决方案以及 选择合适网卡驱动方案
查看>>
ActionBar中ShareActionProvider简单使用
查看>>
分析以HTML5开发移动游戏的可行性
查看>>