Swift 基础语法

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()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容