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 //常量不可修改
//字面值
//整数的字面值
var x = 10
x = 0000000015//整数的字面值会忽略前面任意多个0
x = -15
x = 1_000_000_000//这里的下划线没有实际意义,只是增加代码的可读性
//八进制
x = 0o15
//十六进制
x = 0xff
//二进制
x = 0b110010
//浮点数
var y = 3.14
y = 1.25E-2//科学计数法 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 = "我有\(apples)个苹果和\(oranges)个橘子"
let show : String = "\(apples)"
print(appleSummary)
//swift 中的数据类型
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)
//声明字符串变量 并创建出来(默认初始值是空字符串)
var str3 = String()
print(str3)if str3.isEmpty {
print("这个字符串是空的")
}
let constString = "常量"
//constString = "修改"
var variable = "变量"
variable = "修改"
//值类型 和 引用类型//swift中的字符串是值类型(所有基本数据类型都是值类型//swift中所有基本类型数据类型全部是结构体//)
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中参数值传递 和参数地址传递
//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中数组 字典 集合中放入的元素只能是NSObject类型的元素
//UIView *view = [[UIView alloc] init];//1
//NSMutableArray *array = [NSMutableArray array];
//[array addObject:view] //view + 1 2
//[view release] //-1
//c 中 字符是字符数组,swift中一样
var catCharacters : [Character] = ["C", "a", "t", "!"]
catCharacters[0] = "A"
//通过字符数组创建字符串
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
/************** 复习原来的知识 *******************/
//创建一个空数组
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中的赋值运算符函数没有返回值
//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中可以对浮点数取余
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
//区间运算符
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,也不会继续执行下面的case
3.如果需要继续向下贯串,只能使用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.循环
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)
}
}