swift学习第一天 :语法
1.常量和变量
var 修饰变量 (可以修改)
let 修饰常量(不可变)
print代理oc中的NSLog输出
2.数据类型转换:Swift是强语言(OC是弱语言)故进行转换时必须指明数据类型,即Swift中不存在隐式类型转换,全部都是显示的
例子:
1.普通转换
let num1 = 10 //Int 类型
let num2 = 2.3 //Double 类型
let num = num1 + Int(num2) //必须转为统一类型才能进行运算,num为Int类型
print(num) //输出 12
2.强制类型转换
let num3:Int = Int(num2)
注意:Swift中数据类型首字符大写
3.分支
1.if
Swift 中的if的使用方式“基本上”和oc一致
(1).Swift中的if可以省略()
(2).Swift中即使if后面只有一条语句,也不能省略{}
(3).Swift中if的判断条件,只能放bool值,取值只有ture/false
let num4 = 10
if num4 == 10
{
print("1")
}
在swift中三目运算符用的特别多
let num44 = (num4 == 10) ? 10:5
print(num44)
2.switch
Swift 中的switch
(1).后面的()可以省略
(2).oc中如果没有break会穿透,但是Swift中不会
(3).oc中如果要在case中定义变量,必须加上{},但是Swift中不用
(4).oc中的default的位置随便,但是Swift中的default只能放最后
let num5 = 2
switch num5 {
case 1:
break
case 2:
break
default:
break
}
3.for
普通for循环 和oc中基本一致
特色:
(1). 0..<10 代表一个区间范围 ,从0 - 9 ,包头不包尾
(2). 0…10 代表一个区间范围 ,从0 - 10 ,包头包尾
for var i in 0..<10 {
print(i)
}
for i in 0...10 {
print(i)
}
(2). _ 代表忽略,如不关心某个参数,就可以使用_
for _ in 0..<10 {
print("sch")
}
4.while:开发中很少用,“基本”和oc用法一致
var num6 = 0
while num6 < 10 {
print(num6)
num6=num6+1
}
5.do while:在Swift2.0之后用repeat while代替,do用作捕获异常
var num7 = 0
repeat{
print(num7)
num7=num7+1
}while num7 < 10
6.可选类型:Optional 代表着可有可无 即一个方法或数据类型后面有?,就代表着是一个可选类型
let url = NSURL(string:"https://www.baidu.com")
print(url)//输出:Optional(https://www.baidu.com)
注意:可选类型打印出来呗Optional包裹,如果不想被Optional包裹,加 !
let url = NSURL(string:"https://www.baidu.com")
print(url!)//输出:https://www.baidu.com
!代表告诉编译器 可选类型一定有值,可以强制解析;如果可选类型中没有值,又进行了强制解析,程序会崩溃
Swift的用意是想让我们将大部分运行时的错误,都在编译时解决,即从运行时转到了编译时
故为防止程序出现崩溃,我们应该做的更为严谨一点
let url = NSURL(string:"https://www.baidu.com")
if url != nil{
print(url!)
}
鉴于上面这种方法,苹果官方也给出了更为严谨的方法:可选绑定
//urlFinal:是在url判断有值得情况下 将值取出来赋给urlFinal,故urlFinal一定有值
if let urlFinal = url {
print(urlFinal)
}
7.数组:和oc的区别就是去掉前面的@符号
let dataList:NSArray = ["11","q"]
8.字典
(1).创建字典 用 []
[String:Any] 常见的类型
let dict:[String:Any] = ["name":"sch","age":25]
print(dict)
(2).获取value
if let nameFinal = dict["name"] {
print(nameFinal)
}
(3).遍历
//利用元祖类型遍历字典,会自动将字典中的key赋值给元祖中的第一个变量,将value估值给元祖中的第二个变量
for (key,value) in dict {
print(key)
print(value)
}
(3).新增key / value
var dict1:[String:Any] = ["name":"sch","age":25]
dict1["sex"] = "boy"
print(dict1)//输出:["name": "sch", "age": 25, "sex": "boy"]
(4).更新key / value
如果对应的key在字典有会更新,如果没有就新增
dict1["name"] = "you"
print(dict1)//输出:["name": "you", "age": 25, "sex": "boy"]
(5).删除
dict1.removeValue(forKey: "name")
print(dict1)//输出:["age": 25, "sex": "boy"]
(5).合并:就是遍历和新增/更新的集合
for (key,value) in dict {
dict1[key] = value
}
print(dict1)//输出:
["age": 25, "sex": "boy", "name": "sch"]
9.字符串
字符串string用””
oc中的字符串是一个对象,继承于NSObject
swift中的字符串是一个结构体,性能比oc中的高
(1) .拼接
var str = "123"
let str1 = "456"
str += str1
print(str)
(2).格式化
//方法一:
//目标:name=sch,age=25
//swift中可以使用\()来拼接其他值
var n = "sch"
let a = "25"
str = "name=\(n),age=\(a)"
print(str)//输出:name=sch,age=25
//方法二:
//所有的值必须放在arguments数组中,哪怕只有一个值
//09:02:23
str = String(format:"%02d:%02d:%02d",arguments:[9,2,23])
print(str)//输出:09:02:23
(3).截取:建议使用oc字符串的截取方法,应为swift的字符串截取太复杂
swift和oc中字符串可以和oc中的字符串非常非常方面进行转换
var str2:NSString = "sch is studing";
var str4 = str2.substring(with: NSMakeRange(0, 3))
print(str4)//输出:sch
10.函数
Swift函数的格式”
语义:将前面计算的结果返回给 -> 返回值
func 函数名(参数列表) -> 返回值
{
执行代码
}
(1).没有参数,没有返回值
//没有返回值写viod
func sch() -> Void{
print("sch")
}
//也可以简写用()代替viod
func sch1() -> (){
print("sch1")
}
//或者直接省略 -> ()/-> Void
func sch2(){
print("sch1")
}
(2).没有参数,有返回值
func sch3() -> String {
return "sch3"
}
(3).有参数,没有返回值
func sch4(url:String,a:Int) {
print("sch4")
}//调用:sum(a: 2, b: 3)
func sum(a:Int,b:Int) {
print(a+b)
}//调用:sum(a: 2, b: 3)
(4).有参数,有返回值
func sum1(a: Int, b: Int) -> Int{
return a+b
}