? Swift 字符串介紹
OC和Swift中字符串的區別
? ? ? ?OC中字符串類型是NSString ,在Swift中字符串是String
? ? ? ? OC中字符串贏@"", Swift中字符串用""
?Swift中用String的原因
? ? ? ?1. String是一個結構體,性能強大
? ? ? ?2. NSString是一個OC對象, 性能略差
? ? ? ?3. String支持直接遍歷
? ? ? 4. Swift提供String和NSString之間的無縫轉換
/**
*字符串使用
*/
// 1.定義字符串
let opration = "Hello, world"
//2.遍歷字串? characters
for c in opration.characters{
print(c)
}
//3. 字符串拼接
//3.1兩個字符串之間的拼接
let str1 = "不會"
let str2 = "去學"
let str3 = str1 + str2
//3.2 字符串和其他數據類型的拼接
let name = "mj"
let age = 18
let height = 1.88
let info = "name = \(name), age = \(age), height\(height)"
//3.3 字符串拼接時,字符串的格式化 arguments :數組 (OC中不能放基本數據類型)
let min = 2
let second = 8
let timeString =? String (format: "%02d:%02d", arguments: [min,second])
//4. 字符串截取
let urlString? = "www.baidu.com"
//簡單方式是將String類型轉換為OC的NSString類型? --> (string as NSString)
let header = (urlString as NSString ).substringToIndex(3)
let middle = (urlString as NSString ).substringWithRange(NSMakeRange(4, 5))
let footer = (urlString as NSString ).substringFromIndex(10)
數組
數組的介紹 : 1. ?數組(Array)是一串有序的由相同類型元素構成的集合;2.數組中的集合元素是有序的,可以重復出現.
Swift中的數組是Array,是一個泛型集合
數組的初始化(使用let修飾的數組是不可變數組, ?使用var修飾的數組是可變數組)
// 1. 定義數組:? //1.1 定義可變數組: 使用var修飾標識符定義
vararray1 : [String] = [String]()? // 定義一個可變數組,必須初始化才能使用
letarray2 : [NSObject] = ["why",18] // 定義一個不可變數組
在聲明一個Array類型的時候可以使用下列的語句之一
var stuArray1:Array<String>
var stuArray2:[String]
聲明的數組需要進行初始化才能使用,數組類型往往是在聲明的同時進行初始化的
var array = ["why","lnj","lmj"]// 定義時直接初始化
var array :Array<String>// 先定義,后初始化
array = ["why","lnj","lmj"]?
//1.2 定義不可變數組 :使用let修飾標識符定義
let array = ["why", "78", "haha"]
//2. 對可變數組的基本功使用
array.append("yz") // 添加數據
array.removeFirst()? // 刪除元素
array[0] ="why"? // 修改元素
array[1]? // 取值
? Swift字典的使用 -->Dictionary 泛型
系統會自動判斷后面的[]中存放的是鍵值對還是一個個的元素(類型推導) ; 鍵集合是不能有重復元素的,而值集合是可以重復的,鍵和值是成對出現的
*/
//1.字典創建
//1.1不可變字典
let dic = ["name":"wangjianquan", "age": 18, "height": 1.88] // 定義字典的同時,進行初始化
//1.2 可變字典
//NSObject : 一般用于創建對象? AnyObject: 一般用于指定類型
var dictM = [String : AnyObject]()
//2 . 對可變字典的操作
//2.1 添加
dictM["sex"] = "男"
dictM["age"] = 20
dictM["fe"] = 25
dictM
//2.2 刪除
dictM.removeValueForKey("sex")
dictM
//2.3 修改
dictM["fe"] = 60
dictM
//2.4 獲取某一個元素
dictM["age"]
//3. 遍歷字典
//3.1遍歷所有的key
for key in dictM.keys{
print(key)
}
//3.2遍歷所有的value
for value? in dictM.values{
print(value)
}
//3.3遍歷所有的鍵值對
for (key, value) in dictM{
print(key)
print(value)
}
//4. 字典的合并: ?字典不可以相加合并
let dic1 = ["a": 18, "b": "haha", "c": 10]
var dic2 =? ["name":"wangjianquan", "age": 18, "height": 1.88]
//let rsultDic = dic1 + dic2 // 錯誤寫法
for (key, value) in dic1{
dic2[key] = value;
}
/**
*? Swift 元組的使用(swift中特有的).是一種數據結構;類似于數組或者字典,可以用于定義一組數據, 組成元組類型的數據可以稱為"元素"
*/
//元組的常見寫法
//1. 使用元組定義數據
//1.1
let info2 = ("who",18, 1.88) //最基本寫法
//1.2可以給元組中的每一個元素起一個別名
let info3 = (ss : " sd",nl : 18, sg : 1.88)
info3.sg
info3.ss
info3.nl
//1.3元組中元素的別名,就是元組的名稱
let (XM, NL, SG) = ("who",18, 1.88)
XM
NL
SG
可選類型
/** ?在OC開發中,如果一個變量暫時不使用, 可以賦值為0(基本數據類型)或者賦值為空(對象類型), 在Swift中, nil也是一個特殊的類型,因為和真實的類型不匹配是不能賦值的(強語言); ? ?但是開發中賦值為nil在所難免, 因此推出了可選類型; ? ?可選類型的取值: 空值 ;有值*/
//定義類(定義在類里面的屬性一般定義成變量 var )
//swift中規定: 對像中的任何屬性在創建對象時, 都必須有明確的初始化值
//1. 定義可選類型??
//1.1? 方式一: 常用寫法
var birthday :Optional<Int>= nil
//1.2 方式二: 語法糖
var birthday1 : String? = nil
//2. 給可選類型賦值
birthday = 15? ? //類型要相同
birthday1 = "阿爸"
//3. 取出可選類型的值
//可選類型用 + ! : 強制解包
//4. 強制解包是很危險的,如果可選類型為nil,強制解包就會崩潰, (先判斷是否為nil),通過可選綁定
if birthday != nil{
print(birthday!)
}
// 5. 可選綁定
//1. 判斷birthday1是否有值, 如果沒有值,直接不執行{}
//2. 如果有值系統會自動將birthday1進行解包, 并且將接報后的結果賦值給tempName
if let tempName = birthday1{
print(tempName)
}
//可選類型的應用場景
//通過一個字符串創建一個NSUrl對象
let url : NSURL? = NSURL (string : "http://www.baidu.com/")//string :方法返回的是NSURL的可選類型, 等同于 let url2 = NSURL (string : "http://www.baidu.com/") url有中文時返回的url會為空
//根據url創建NSURLRequest對象
//此時如果用強制解包是很危險的,不建議使用,一般用可選類型的方式
let reuquset = NSURLRequest(URL: url!)
//用可選類型的方式
if let url = url {??????????? let request = NSURLRequest(URL: url)?????? }
打印Log
//1. 獲取打印所在的文件
let file = (__FILE__ as NSString).lastPathComponent
//2. 獲取打印所在的方法
let funcName = __FUNCTION__
//3. 獲取打印所在的行
_ = __LINE__
print("\(file) :[\(funcName)] (\(__LINE__))--->132")
由于Swift api 不斷更新中,相關代碼會再之后的api中出現小錯誤,最新的API也會再github的代碼中完善, ?歡迎各位看官指正糾錯