Swift才出来的时候看过一遍,忘记了。记下笔记加深印象。
let 定义一个常量 var 定义一个变量 可以不声明变量类型 变量名可用Unicode字符
let f = 70
let f1: Float = 70
let 🐶 = "加班狗"
var s: String = "string"
var red, green, bule: Double
let `int` = "abc"
print("Swift \(🐶)")
print(f, f1, separator: "====", terminator: "\n")
与C相似,Swift的提供了8,16,32,64位的有符号和无符号整型。(UInt8...) 一般来说无需特别指定.用Int就好,32位平台Int和Int32长度相同;64位平台Int和Int64长度相同.
Int.min Int.max分别取最大值和最小值.
与OC一样,swfit提供了两种
Float Double
typealias 关键字 相当于OC的 typedef
true or false终于不是 YES or NO了
元组把多个值组合在一起,每一个值可以是不同的数据类型.
let http404Error = (404,"Not Found")
类型为(Int,String)的元组
let (statuCode, error) = http404Error
print(statuCode,error)
将元组内容分解成单独的的常量和变量
let (statuCode,_) = http404Error
print(statuCode,error)
分解的时候忽略的部分用_标记
print(http404Error.0, http404Error.1)
可以通过下标来访问
let http200 = (code:200, des:true)
print(http200.code, http200.des)
定义元组的时候给元素命名,可以通过名字来取值
optionals 来处理可能缺失的情况,可选类型来表示:
* 有值,等于x 或者 没有值
Int? or optional Int
可以给可选变量赋值为nil来表示它没有值。nil不能用于非可选的常量和变量,如果要处理缺失情况,应该声明成对应的可选类型. OC中nil指向不存在的对象的指针。Swift中nil不是指针它是一个确定的值,用来表示缺失,任何类型的可选状态都可以设置为nil。
当确定可选类型确实包含值之后,可以在可选的名字后面加一个感叹号来取值
if convertNumber != nil{
print("(converNumber!)")
}
使用!获取一个不存在可选值会导致运行时的错误。使用!
来强制解析之前,一定要确定可选包含一个非nil
的值。
使用可选绑定来判断可选类型是否包含值,如果包含值就把值赋给一个临时常量或变量。
if let actualNumber = Int(possbileNumber){
print(actualNumber)
}else{
print("not integer")
}
隐式解析可选其实就是一个普通的可选类型(可自动解析的可选类型),但是可以被当做非可选类型来用,不需要每次都使用解析来获取值。 把想要用作可选的类型后面的问号改成感叹号来来声明一个隐式解析可选类型。
如果在隐式解析可选类型中没有值的时候尝试取值,一样会触发运行时错误。如果一个变量之后可能变成nil请不要使用隐式解析可选。
很多地方和大部分语言是相同的。只记下不同的地方。
Swift的赋值运算符不返回任何值。
if(x = 1){
//此句错误。再也不用担心 ==写成=了。
}
Swift默认情况下不允许出现溢出情况。但可以使用Swift的溢出运算符来实现溢出运算。如(a &+ b) 可用+号来拼接字符串这点与python很像。
Swift是可以对浮点数进行求余的。
a ?? b
* a必须是Optional类型
* 默认值b类型必须要和a存储值类型保持一致
相当于 a != nil ? a! : b
a...b
定义一个从a到b(包含a和b)的所有值区间,b必须大于等于a.
for index in 1...5{
print(index)
}
a..<b
定义一个从a到b但不包括b的区间,称为半区间是因为包含第一个值不包含最后一个值. 数组的时候用。
直接使用加号
print("今天星期四"+"明天元旦放假啊")
换句话说就是格式化字符串。个人理解是使用\()
来占位替换.
let tucao = "车牌又要到3W了"
print("\(tucao)。要不要离开这个鬼地方")
插值字符串写在括号中的表达式不能包含非转义反斜线
\
,并且不能包含回车或换行。
"数量".characters.count
在Swift 中,使用可拓展的字符群集作为Character值来连接或改变字符串时,并不一定会更改字符串的字符数量。
NSString的length和characters.count返回的长度可能不一样。这个得小心了。感觉很复杂。#-_-
var word = "cafe"
print("the number of characters in \(word) is \(word.characters.count)")
word += "\u{301}"
print("the number of characters in \(word) is \(word.characters.count)")
Swift的字符串不能用整数做索引
startIndex属性区取字符串第一个字符的索引。
endIndex属性获取最后一个字符的后面一个位置的索引.
(endIndex不能做为一个字符串有的有效下标会越界)。
index.predecessor()得到index的前一个索引。
index.successor()得到index后一个索引。
startIndex.advancedBy(3) startIndex后面的第三个索引。
print(word[word.startIndex],
word[word.endIndex.predecessor()],
word[word.startIndex.successor()],
word[word.startIndex.advancedBy(3)])
字符串characters属性的indices属性创建一个包含全部索引Range,用来在一个字符串中访问单个字符
for index in word.characters.indices{
print(word[index])
}
var s = "插入"
s.insert("啊", atIndex: s.endIndex)//插入单个字符
s.insertContentsOf("字符串".characters, at: s.endIndex)//插入字符串
s.removeAtIndex(s.startIndex)//移除单个
let range = s.endIndex.advancedBy(-2)..<s.endIndex//移除子串
s.removeRange(range)//清空字符串
print(s)
== 前缀/后缀相等
var a_ = "字符串1",b = "字符串2"
print(a_ == b, a_.hasPrefix("字符串"),b.hasSuffix("2"))