swift基本使用
swift語句后面沒有分號,不過就算不小心加了分號也不會報錯,但是為了語法的規范不能加分號
?引框架的時候沒有分號 直接寫上框架名就行
?swift中輸出使用print
?swift中字符串不用加 @ 符號
常量與變量
// 常量和變量
// 在Swift中聲明變量或者聲明常量的時候可以不用寫變量或常量類型,因為系統會幫我們自動推導出對應的類型
// Swift中如果要在一條語句后面再加上一條語句必須用分號來分隔,但是不建議這種寫法
// 變量
var a = 10; a = 20
// 常量
let b = 10
// b = 20
// 在swift中我們的變量名可以使用表情或者中文來表示,再原來的OC中是不可以的
var ?? = 20
var 王 = 30
?? + 王
// 當我們的變量等于一個浮點型數的時候,系統會自動推導成一個 Double 類型
var c = 99.2
// Swift中的類型
var zhengxing:Int = 100
var fudianxing:Float = 99.1
var zifuchuan:String = "aa"
// Character 為字符類型 就是只有一個字符 和C語言中的char類型
var erjie:Character = "z"
// Swift中不支持隱式轉換
// 在OC中強制轉換 (float)a 但在swift中是 Float(a)
Float(zhengxing) + fudianxing
字符串
var yu = "我是一只快樂的小魚"
// 在Swift中 BOOL值不再是YES和NO了 而是 true 和 false
var isTrue = true
// 判斷字符串是否為空
isTrue = huangyu.isEmpty
// Swift中字符串可以看做是字符的集合 那么 怎么求字符串的長度
yu.characters.count
// 求字節的長度
yu.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)
// 在Swift中字符串的第二種寫法
var abc = "x"
var abcd = String("x")
// 拼接字符串
print(abc + abcd)
// 在Swift中打印可以把對象或者變量直接寫在括號中
print(abc)
// 判斷2個字符串是否相等
abc == abcd
// 大小寫轉換
let str = "hello"
str.uppercaseString
str.lowercaseString
// 格式化創建字符串
let str2 = String(format: "%02d:%02d", 1, 2)
let str3 = String(format: "%02d-%02d", arguments: [1, 2])
print(str2)
print(str3)
str2.substringToIndex(<#T##index: Index##Index#>)
//字符串的其他操作全部轉化為NSString再去操作
// 轉換
let str4:NSString = str2 as NSString
?數組
var arr1:Array = ["A", "2", "3", "4"];
var arr2 = ["1", "b", "3"];
// 聲明一個空的數組,數組中的元素都是String類型
var arr3 = Array()
var arr4 = [String]()
// 數組遍歷? for-in(明確的指出數組的類型)
for temp in array1 as [String] {
print(temp)
}
// 元祖遍歷(index為數組下標,value為下標對應數組中的值)
for (index, value) in array1.enumerate()
{
print("index = \(index), value = \(value)")
}
// 添加元素
arr2 += ["forever"]
arr2.append("!")
arr2.appendContentsOf(["!", "!"])
// 在某個下標下添加元素
arr2.insert("cc", atIndex: 0)
arr2.insertContentsOf(["結婚"], at: 0)
// 刪除最后元素
arr2.removeLast()
// 刪除指定下標下的元素
arr2.removeAtIndex(0)
// 刪除所有元素
arr2.removeAll()
?字典
var dic1: Dictionary= ["a" : 10]
var dic2 = ["b" : 20]
// 空的字典
var dic3: Dictionary= [:]
var dic4 = Dictionary()
dic3 = ["b" : "c"]
dic3.removeValueForKey("b")
// 刪除所有
dic3.removeAll()
// 如果一個值可能為nil,那么這個值就是可選類型,用?標識
// Optional包圍的就是一個可選類型
// 可選類型不能直接使用,必須進行強制解包,!強制解包,對nil強制解包會造成crash
// unexpectedly found nil while unwrapping an Optional value 對一個空的可選類型進行強制解包
// (a1 ?? "234")對可選類型進行判斷,如果可選類型值為nil,則給他一個默認值
var a1:String?
a1 = "12345"
print(a1!.characters.count)
print((a1 ?? "234").characters.count)
?循環結構
for var i = 0; i < 10; i++
{
print(i)
}
// [0, 10]
for j in 0...10
{
print(j)
}
// [0, 10)
for j1 in 0..<10
{
print(j1)
}
var j2 = 10
while (j2 < 100) {
// 在Swift 3 以后不能使用 i++ 要寫成 i+=1
j2 += 1
print(j2)
}
// repeat..while
repeat {
j2 += 1
} while j2 < 1000
?判斷
if a == 10
{
print("123")
}
else {
print("456")
}
// 可選類型的條件分支
let str:String? = "hello"
// (1) if-let是對可選類型的判斷 如果可選類型為空則不執行代碼塊, 如果不為空則用tempStr來接收此刻這個可選類型解包后的值
if let tempStr = str {
print(tempStr)
}
// (2) if-let-where跟if-let相似,where是對前面定義的這個局部變量再做一層判斷
if let tempStr = str where tempStr.characters.count > 2 {
print(tempStr)
}
// guard-let-else
// 如果可選類型str為nil,則執行code代碼塊,最后一定要return,如果不為nil則強制解包后的值賦值給tempStr,這樣在{}外賣就可以使用tempStr
guard let tempStr = str else {
// code
return
}
tempStr......
switch
// switch 不局限判斷整型,可以是浮點型,也可以是字符串等等
// switch 后面的小括號可以省略,大括號不能省略
// case 后面至少要有一條執行語句!!!并且case后面的大括號可以省略,break可以不寫,不會造成貫穿
// default一定要寫,并且只能寫在最后
let f = 3.2
switch f {
case 3.0:
print("===3.0")
case 3.1:
print("===3.1")
case 3.2:
print("===3.2")
default:
print("unknow")
}
?枚舉
// (枚舉值可以關聯任意類型,沒有默認的關聯值)
// 關聯如果是整型的話,會默認遞增上去, 如果不是Int, 必須每個枚舉值都關聯上
enum Month:Int {
case January = 10
case February
case March
case April
}
// 如果明確指出一個變量/常量是屬于那種枚舉類型的話,可以直接.枚舉賦值
let month = Month.February? // let month:Month = .january
var month1 = Month.January
month1 = .February
switch month {
case .January:
print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")
print(month)
case .February:
print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")
print(month)
case .March:
print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")
print(month)
case .April:
print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")
print(month)
}
函數
// 有參無返
// 當方法有參數時, 第一個參數名不顯示 要在前面加上
func test2(num1 num1: Int, num2: Int)
{
print(num1 + num2)
}
test2(num1: 2, num2: 3)
// 有參有返
func test3(num1 num1: Int, num2: Int) -> Int
{
return num1 + num2
}
test3(num1: 4, num2: 5)
// 元祖作為返回值
func yuanzu(num1 num1: Int, num2: Int) -> (Int, Int)
{
return (num1 + num2, num1 * num2)
}
yuanzu(num1: 10, num2: 10)
// 函數的嵌套
func test4()
{
print("1")
func test5()
{
print(2)
}
test5()
}
test4()
?閉包 (block)
//? ? ? ? ? ? {
//? ? ? ? ? ? ? ? (參數名:參數類型...) -> 返回值類型
//? ? ? ? ? ? ? ? in
//? ? ? ? ? ? ? ? code, 執行代碼
//? ? ? ? }
// 無參無返
let closure = {
() // () -> ()? ? () -> Void
in
print("無參無返")
}
closure()
// 有參無返
let closure1 = {
(str:String, str1:String) -> Void
in
print("有參無返\(str), \(str1)")
}
closure1("hello", "world")
// 無參有返
let closure2 = {
() -> String
in
return "無參有返"
}
print(closure2())
// 有參有返
let closure3 = {
(str:String, str1:String) -> String
in
return str + str1
}
print(closure3("有參有返", "world"))