1.var與let
//用關鍵字 var 聲明字符串變量 str 類型是通過右值推斷出來的(類型推斷)
var str = "Hello, playground"
//聲明一個變量 view 類型推斷為 UIView類型
var view = UIView()
view.addSubview(UIView())
for var i = 0; i<10; i++ {
}
var a = 10
var b = 20
var c = a + b
//輸出
print(c)
//變量 用var聲明
var variable = 10
variable = 20
//常量 用let聲明
let const = 10 //const 是常量 10 是字面值
//const = 20 //常量不可修改
//字面值
//整數(shù)的字面值
var x = 10
x = 0000000015//整數(shù)的字面值會忽略前面任意多個0
x = -15
x = 1_000_000_000//這里的下劃線沒有實際意義,只是增加代碼的可讀性
//八進制
x = 0o15
//十六進制
x = 0xff
//二進制
x = 0b110010
//浮點數(shù)
var y = 3.14
y = 1.25E-2//科學計數(shù)法? 1.25*10^-2
2.基本類型
//var str = UIImage()
//int a
//var a : Int
//聲明變量標準寫法
var welcomeMessage2 : String = "welcomeMessage"
//類型標注? 聲明字符串變量
let welcomeMessage : String
//初始化
welcomeMessage = "Welcome to swift"
//welcomeMessage = 10 //類型不配備
//welcomeMessage = "wts" //常量不可以修改
/********類型推斷? *****/
var x = 10 //推斷為整型
var msg = "OK" //推斷為一個字符串
var a = 0.0, b = 2.2, c = 2, d = "abc"
//a b 推斷為浮點類型 c 推斷為整型 d 推斷為字符串類型
var i1 = 5
var d1 : Double
//這里的類型檢查非常嚴格熬词,int和double之間都不能自動轉換耕捞,如果要轉換必須強制轉換
d1 = Double(i1)
//i1 = i1 + 3.14
d1 = d1 + 3.14
//字符串拼接
var label = "This is"
var label2 = "label"
var text = label + label2
var width = 94
text = text + " width is " + String(width)
print(text)
let apples = 3
let oranges = 5
let appleSummary = "我有\(zhòng)(apples)個蘋果和\(oranges)個橘子"
let show : String = "\(apples)"
print(appleSummary)
//swift 中的數(shù)據(jù)類型
var i : Int
Int.max
Int.min
var ui: UInt
UInt.max
UInt.min
var i8 : Int8
Int8.max
Int8.min
var ui8 : UInt8
UInt8.max
UInt8.min
var i16 : UInt16
var i32 : UInt32
var i64 : UInt64
UInt64.max
//浮點
var f1 : Float
var f2 : Double
var f3 : Float32
var f4 : Float64
//Float32 是 Float的別名
//typealias Float32 = Float
//c中起別名的方式
//typedef Float32 MyFloat
//swift 中起別名的方式
typealias MyFloat = Float32
var f : MyFloat = 3.24
//布爾
var isBool : Bool //取值 只有true和false
isBool = true
isBool = false
var x2 = 100
isBool = (x2 == 100)
3.值類型和引用類型
//聲明字符串 并 初始化var str = "abc"
print(str)
//聲明字符串 沒有初始化
var str2 : String//print(str2) //沒有初始化的變量不可以使用
str2 = ""
print(str2)
//聲明字符串變量 并創(chuàng)建出來(默認初始值是空字符串)
var str3 = String()
print(str3)if str3.isEmpty {??
? print("這個字符串是空的")
}
let constString = "常量"
//constString = "修改"
var variable = "變量"
variable = "修改"
//值類型 和 引用類型//swift中的字符串是值類型(所有基本數(shù)據(jù)類型都是值類型//swift中所有基本類型數(shù)據(jù)類型全部是結構體//)
var string1 = "Hello"
var string2 = string1
string1 = "OK"
string2
//結構體是值類型
struct MyStruct {
var a = 10
var view = UIView()
func test() {
print("test")
}
}
var ms = MyStruct()
var ms2 = ms //賦值內容
ms2.a
ms.a = 20
ms2.a
//類 是引用類型
class MyClass {
var a = 10
var view = UIView()
func test() {
print("test")
}
}
var mc = MyClass()
var mc2 = mc //賦值內容
mc2.a
mc.a = 20
mc2.a
//OC中的字符串是引用類型(OC中的所有的類都是引用類型)
var nsString1 : NSMutableString = "Hello"
var nsString2 = nsString1
//通過引用改變 內容
nsString1.appendString("abc")
nsString2
//改變 nsString1 的引用的地址
nsString1 = "aaaaaaa"
nsString2
////C中參數(shù)值傳遞 和參數(shù)地址傳遞
//void add(int a) {//值傳遞
//a += 20
//? ? //a = 120
//}
//
//void add1(int *a) {//地址傳遞
//*a += 20
//}
//int x = 100
//
//add(x) //值傳遞
//x = 100
//add1(&x)? //地址傳遞
//x = 120
//字符
var char : Character = "A"
char = "中"
char = "??"
var s = "ad??fgfhfj\(100)hhfhftygyh"
var 中國 = "china"
var ?? = "dog"
var s2 = "日本" + ??
var str10 = "Hello"
var str20 = "there"
let rest = str10 + str20
var ch : Character = "!"
let newStr = rest + String(ch)
let newStr2 = rest + "\(ch)"
//OC中數(shù)組 字典 集合中放入的元素只能是NSObject類型的元素
//UIView *view = [[UIView alloc] init];//1
//NSMutableArray *array = [NSMutableArray array];
//[array addObject:view]? //view + 1? ? ? 2
//[view release]? //-1
//c 中 字符是字符數(shù)組私恬,swift中一樣
var catCharacters : [Character] = ["C", "a", "t", "!"]
catCharacters[0] = "A"
//通過字符數(shù)組創(chuàng)建字符串
var catString : String = String(catCharacters)
//遍歷 字符串
for char in catString.characters {
print(char)
}
if catString.hasPrefix("A") {
print("字符串是以A開頭的")
}
if catString.hasSuffix("!") {
print("字符串是以鲸睛!結尾的")
}
let wiseWords = "\"想象力比知識更重要\" ----愛因斯坦"
print(wiseWords)
//String 和 NSString 的轉換
var nsString_1 : NSString = "NSString"
//NSString 轉換為 String 需要 as
var string_1 : String = nsString_1 as String
as String
//String 轉換為 NSString 直接自動轉
var nsString_2 : NSString = string_1
/************** 復習原來的知識 *******************/
//創(chuàng)建一個空數(shù)組
var objects : [NSObject] = []
var nsNum = NSNumber(int: 100)
var nsString = NSMutableString(string: "abc")
nsString.substringToIndex(1)
objects.insert(nsNum, atIndex: 0)
objects.insert(nsString, atIndex: 1)
objects.count
var obj : NSObject = objects[1]
//將 NSObject 類型 轉換為 NSMutableString類型
var strObj = obj as! NSMutableString
strObj.substringToIndex(1)
4.運算符
var a, b, c, d, e, f : Int
a = 10
b = 20
//swift中不可以這樣使用帚戳,因為swift中的賦值運算符函數(shù)沒有返回值
//a = b = c = d = e = f = 50
1 + 2
5 - 3
2 * 3
10 / 3
10.0 / 3
10.3 / 1.2
9 % 4
-9 % 4
9 % -4
-9 / -4
//swift中可以對浮點數(shù)取余
10.3 % 1.2
a = 10
//單目
a++
++a
a = 10
b = a++ + ++a + ++a + a++
a--
--a
//比較運算符
a == b
a != b
a > b
a < b
//三目運算符
a > b ? a : b
//? 聲明可選值 swift中只有可選值可以為nil 可選值默認使用nil初始化
var x : Int?
x = nil
let r = x != nil ? x : 0
r
//空合運算符
let r2 = x ?? 0 //如果x不是nil 返回x 否則返回 0妹卿, 和上面的三目 意義一樣
r2
//區(qū)間運算符
a = 5
b = 10
//全開
a...b
5...10
for index in 1...5 {?
?print(index)
}
for index in a..<b {
print(index)
}
//如果不需要 index 可以用 _ 把位置占上
for _ in 1...5 {
print("重復打印這句話")
}
//邏輯運算符
a = 10
b = 20
c = 30
a < b && b < c
a > b || b > c
!(a < b)
//if
//如果一行中有多個語句,使用渣玲;分割
a = 30; b = 50
if a > b {
print("a 大")
} else if a < b {
print("b 大")
} else {
print("一樣大")
}
5.分支
/**
*? switch
1.完備性逗概,不管有多少種可能一定要有分支進入
2.沒有隱式貫串,不用加break忘衍,也不會繼續(xù)執(zhí)行下面的case
3.如果需要繼續(xù)向下貫串逾苫,只能使用fallthrough 來向下貫串
*/
let x = 99
switch x {
case 1:
print("x == 1")
case 2, 3, 4, 5:
if x == 5 {
break
}
print("x 是 2 -- 5")
fallthrough //顯示貫串
case 6...100:
print("x是6---100")
default:
print("x = 不在范圍內")
}
let vegetable = "青辣椒"
switch vegetable {
case "芹菜":
print("這個菜 是芹菜")
case "黃瓜", "豆芽菜":
print("這個菜 是黃瓜 或 豆芽菜")
//用x把vegetable接收過來,并且判斷是否是以辣椒結尾的枚钓,如果是進入case
case let x where x.hasSuffix("辣椒"):
print("這個菜 是那種狠辣狠辣的 \(x)")
default:
print("這個是草")
}
6.循環(huán)
for index in 1...10 {
print("index 的值是\(index)")
}
for index in 1..<10 {
// index = 100 //默認是常量
print("index 的值是\(index)")
}
for ch in "abcdef".characters {
print("ch 的值是\(ch)")
}
for var i = 0; i < 10; i++ {
print("i = \(i)")
}
var j : Int
for j = 0; j < 10; j++ {
print("j = \(j)")
}
var a = 0
while a <= 10 {
print(a)
a++
}
a = 0
//相當于 原來的 do while
repeat {
print(a)
a++
}while a <= 10
7.break和continue
for var i = 0; i < 10; i++ {
if i == 5 {
? ? break
? ?}
? ? print(i)
}
for var i = 0; i < 10; i++ {
if i == 5 {
? ?continue
? ?}
? print(i)
}
print("----------------")
var a = 0
//帶標的語句
loop : while a < 10 {
? ?a++;
switch a {
? ? case 5:
? ? ? ? break loop
? ? case let b where a > 1 && a < 4:
? ? ? ?continue
? ? default:
? ? ? ? print(a)
? ?}
}
print("-----------------")
loop : for var i = 0; i < 3; i++ {
? ?print("=============")
? ? for var j = 0; j < 3; j++ {
if j == 1 {
? ? ?continue loop
? ? }
? ? print(j)
? ?}
?}