1.基本定义
//1. swift中如何导入框架import UIKit
//2.如何定义标识符
// swift中定义标识符必须告诉编译器是常量还是变量let声明常量、var声明变量
//按住option键+鼠标左键查看变量的类型
leta :Int=20//有些使用常量,(更加安全)
varb :Double=1.44
b=2.33
// 3.如果一行中只有一条语句,那么该语句结束后可以不加; ,如果一行中有多条语句,那么以;分割
//4.打印内容
print(a)
print(b)
//常量的使用注意
letm =10
//创建一个对象
varview :UIView=UIView()
//view = UIView()错误的写法
view.backgroundColor=UIColor.red
view.frame(forAlignmentRect: )
// Swift基本运算必须保证类型一致否则会报错因为Swift没有隐试转换
lettempM =Double(m)//强制类型转换
2.逻辑分支的使用
////增加guard
//// 1 . if else判断语句不在有非0/nil即真,判断语句必须有明确的真假Boll-- ture/false
//var i = 0
// if i > 0 {
// print("a > 0")
// } else {
// print("a < 0")
// }
// 2 .三目运算符
//let m = 20
//let n = 10
//
//let result = m > n ? m : n
// guard的使用2.0以后才有的有guard必须有else它必须在函数中使用里面必须要加return或break关键字
letage =20
leta =18
funconline(age:Int) {
guardage >=18else{
print("回家找妈妈")
return
}
guarda>=18else{
print("qian")
return
}
print("liu")
}
online(age:age)
letsex =0
// 1. switch后面的()可以省略,case语句结束后,break可以省略
//switch sex {
//case 0:
// print("nan")
//
//default:
// print("nv")
//}
//基本用法的补充
// 1.如果系统某一个case中产生case穿透,可以在case结束后跟上fallthrough
// 2.cass后面可以判断多个条件
switchsex{
case0,1,2:
print("nan")
default:
print("nv")
}
// 3. switch还可以判断浮点型以及字符串
leta =3.14
varresult =0
switcha{
case3.14:
print("P")
default:
print("M")
}
letm =10
letn =20
letstr ="+"
switchstr{
case"+":
result=m+n
case"-":
result=m-n
default:
print("非法操作")
}
//3.3 switch可以判断区间开区间0..<20 0~19闭区间0...20 0 ~20
letscore =88
switchscore{
case0..<60:
print("不及格")
case60..<70:
print("及格")
case70..<80:
print("中等")
case80...100:
print("优秀")
default:
print("不存咋")
}
3.循环的使用
// for in写法
foriin0..<10{
print(i)
}
// for in写法(特殊)如果标识符不需要使用,可以使用_来代替for i in 0...9、
//for i in 0...9 {
// print("hello world")
//}
for_in0...9{
print("hello world")
}
//2.while循环使用
vara =10
whilea>0{
print(a)
a-=1
}
//do while 用repeat 代替
repeat{
a+=1
print(a)
}whilea<10
1.字符串的使用
// 1.定义字符串
letstr ="Hello World"
//2.遍历字符串
forcinstr.characters{
print(c)
}
//3.字符串的拼接
letname ="liumu"
letname1 ="LM"
letname2 =name+name1
//3.1字符串和其他标识符之间的拼接
letage =18
letheight =1.88
letinfo ="my name is\(name),my age is\(age),my height is\(height)"
//3.3拼接字符串时,字符串的格式化
letmin =2
letsecond =8
lettimeString =String(format:"%02d:%02d",arguments: [min,second])
//4.字符串的截取
leturlString ="www.520lm.com"
//先将它转换成NSString类型(urlString as NSString)
letheaser = (urlStringasNSString).substring(to:3)
2.数组的使用
//1.定义数组
//1.1定义不可变数组,使用let来定义,
letarray = ["mu","huan","ming","gggg"]
//1.2定义可变数组,使用var来定义,
vararrayM =Array()//创建可变数组
vararrayM1 = [String]()//创建可变数组
//2.对可变数组操作
//增加
arrayM.append("ggg")
arrayM.append("kkk")
arrayM.append("jjj")
arrayM.append("ggg")
arrayM.append("kkk")
arrayM.append("jjj")
arrayM.append("ggg")
arrayM.append("kkk")
arrayM.append("jjj")
//删除
arrayM.remove(at:0)
//修改
arrayM[0] ="hjk"
//取出
arrayM[0]
//3.数组遍历
foriin0..
print(arrayM[i])
}
fornameinarrayM{
print(name)
}
//遍历前两个元素
fornameinarrayM[0..<2] {
print(name)
}
//4.数组合并
letresultArr =array+arrayM//相同类型才能够相加合并
//5.数组排序
arrayM.sort()//升序
3.字典的使用
//1.定义字典
//1.1定义不可变字典,使用let来定义,
letdict:[String:Any] = ["name":"liumu","age":"20","height":5]
//1.2定义可变字典,使用var来定义,
//var dictM = Dictionary()
vardictM = [String:AnyObject]()//初始化可变数组
vardictMr = [String:AnyObject]()
//2.对可变字典的操作
dictM["name"] ="liumu"asAnyObject?
dictM["sex"] ="nan"asAnyObject?
dictM.removeValue(forKey:“name")
dictM["name"] ="lm"asAnyObject?
dictM["sex"]
//3.遍历字典
forkeyindictM.keys{
print(key)
}
forvalueindictM.values{
print(value)
}
for(key,value)indictM{
print(key ,"=",value)
}
//4.合并字典
//即使类型一致也不能相加合并
for(key,value)indict{
dictM[key] = valueasAnyObject?
}
字典转换为数组
你可以提取字典的键值(key-value)对,并转换为独立的数组。实例如下:
varsomeDict:[Int:String]=[1:"One",2:"Two",3:"Three"]letdictKeys=[Int](someDict.keys)letdictValues=[String](someDict.values)print("输出字典的键(key)")for(key)indictKeys{print("\(key)")}print("输出字典的值(value)")for(value)indictValues{print("\(value)")}
isEmpty 属性
Y我们可以通过只读属性isEmpty来判断字典是否为空,返回布尔值:
importCocoavarsomeDict1:[Int:String]=[1:"One",2:"Two",3:"Three"]varsomeDict2:[Int:String]=[4:"Four",5:"Five"]varsomeDict3:[Int:String]=[Int:String]()print("someDict1 = \(someDict1.isEmpty)")print("someDict2 = \(someDict2.isEmpty)")print("someDict3 = \(someDict3.isEmpty)")
以上程序执行输出结果为:
someDict1=falsesomeDict2=falsesomeDict3=true
4.元组的使用
//元组的定义(元组一般作为方法等返回值)
letarray:[Any] = ["why",28,1.88]
letinfo = ("why",18,1.88)
info.0//可以给元组的元素取别名
letinfo1 = (name:"why",age:18,height:1.88)
info1.name
//元素的别名就是元组的名称
let(name,age,height) = ("lll",14,1.88)
5.可选类型的使用
//Swift中规定,对象中的任何属性在创建对象时,都必须有明确的初始值
//1.可选类型的定义
//1.1常规方式(不常用)
//var name : Optional = nil
//1.2语法糖
varname :String? =nil//可选类型
// 2.给可选类型赋值
name="liumu"
// 3.取出可选类型的值
print(name!)//强制解包
//4.注意:强制解包是非常危险的动作,如果可选类型为nil,系统会蹦掉,建议先判断可选类型的值
ifname!=nil{
print(name!)
}
//5.可选绑定
//1.判断name是否有值,如果没有值,直接不执行{}
//2.如果name有值,系统会自动将name解包,并且把解包后的结果复值给tempName
//写法一(不常用)
iflettempName =name{
print(tempName)
}
//写法二(不常用)
ifletname =name{
print(name)
}
//4.可选类型的应用场景
// 4.1通过字符串创建一个NSURL对象
leturl:URL? =URL(string:"http://www.520.com")
ifleturl =url{
letrequest =NSURLRequest(url: url)
}
5.函数的定义
//func函数名(参数)->返回值(如果没有返回值Viod V大写){代码块return返回值}
// 1.没有参数没有返回值
funcabout() ->Void{
print("iphoe7")
}
about()
funcabout1() {
print("iphoe7")
}
// 2.没有参数有返回值
funcreadMeassage() ->String{
return"吃饭了吗"
}
readMeassage()
// 3.有参数没有返回值
funccallPhone(phoneName:String) {
// print("打电话给"+phoneName)
print("打电话给\(phoneName)")
}
callPhone(phoneName:"123456")
// 4.有参数有返回值
funcsum(num1 :Int,num2 :Int) ->Int{
returnnum1 + num2
}
sum(num1:12, num2:24)
5.1函数的使用注意
//注意一:内部参数,和外部参数
// 内部参数:在函数内部可以看到的参数就是内部参数,默认情况下所有的参数都是内部参数
// 外部参数:在函数外部可以看到的参数名称就是外部参数,3.0之前默认从第二个参数开始即是内部参数也是外部参数,3.0后 从第一个开始即是内部参数也是外部参数
// 注意二:swift中默认参数
func makeCoffee(coffName:String = "雀巢") -> String {
return"制作了一杯 \(coffName)咖啡"
}
makeCoffee(coffName: "猫屎")
makeCoffee()
//注意三 :可变参数
func sum(num : Int...) -> Int {
var result = 0
for n in num {
result += n //Swift3.0 以后取消了 ++,-- 语法
}
return result
}
sum(num: 2,3,4,5,6)
//注意四:指针类型
//注意五:函数的嵌套使用
func test () {
func demo() {
print("demo")
}
print("----")
demo()
}
test()