swift语法(2)

1.逻辑分支

  • 分支:if/switch/三目运算符
  • if
    • if后面的()可以省略
    • swift中必须有明确的真假
      • Bool两个取值:false/true
      • 没有非零即真,也没有非空即真
let a = 20
if a >0{
}else{
}
let score = 88
if score < 0 || score >100{
print("不合理")
}else if score <60{
print("不及格")
}else{
print("优秀")
}
  • 三目运算符
    • 使用方法和oc是一致的
let m = 30
let n = 20
let result : Int = m > n ? m : n
  • guard的使用
    • swift2.0新增语法
    • 和if语句非常相似,是为了提高程序的可读性
    • guard语句必须带有else语句
      • 当条件表达式为true的时候,跳过else语句,执行语句组内容
      • 当条件表达式为false的时候,执行else语句中的内容
      • 跳转语句一般是break/return/continue/throw
        • return :结束执行,一般用在方法里
        • break: 跳出循环
        • continue:跳出本次循环,进入下一个循环
        • throw:抛出异常
    • guard写在函数里
//guard格式:
guard 条件表达式 else{
//条件语句
break
}
//---------------
let age = 20
//定义函数
func online(age :Int) -> Void {
//大于18岁,带了身份证,带了钱
    guard age >=18 else{
       print("回家去")
       return
    }
    guard 带了身份证 else{
       print ("回家取身份证")
       return
    }
    guard 带了钱 else{
       print("回家拿钱")
       return
    }
//执行语句
print(“留下来上网”)
}
//调用函数
online(20)
  • switch
    • 苹果对switch进行了大大的增强,使其拥有了其他语言中没有的特性
    • switch的简单使用
      • 基本用法和OC用法一致
      • 不同之处:
        • switch后面可以不跟()
        • case后可以不跟break(默认会有break),不会产生case穿透
    • 如果希望产生case穿透,需要在语句结束时候,加上另一个关键字fallthrough
    • 在swift中switch的case后面可以跟上多个条件,并且多个条件以逗号(,)分隔
//基本用法:sex 0:男 1 :女
let sex = 0
switch sex {
case 0 :
print("男")
case 1 :
print("女")
}
//-------------------
switch sex {
case 0 ,1 :
print("正常人")
default:
print("非正常人")
}
  • swift的特殊用法
    • 判断浮点型
    • 判断字符串类型
    • 支持区间判断
      • 半开半闭区间 0..<10 :0~9 不包含10
      • 闭区间 0...10 :0~10 包含10
//判断浮点型
let m = 3.14
switch m{
 case 3.14:
 print("m是一个π")
 default:
 print("m非π")
}
//判断字符串类型
let a = 30
let b = 20
let opration = "*"
var result = 0
switch opration{
case "+":
result =  a + b
case "-":
result = a-b 
case "*":
result = a *b 
case "/"
result = a/b
default :
print("非法操作")
}
//支持区间判断
let score = 88
switch score {
case 0..60:
  print("不及格")
case 60..80:
  print(“及格”)
case 80..90:
  print("良好")
case 90...100:
  print("优秀")
default: 
  print("不合理分数")
}
  • 总结
  • swift初体验
    • 导入框架 import 框架名称
    • 定义标识符
      • 定义标识符必须指定常量和变量
    • 如果一行当中只有一条语句,那么语句结束,分号可以省略
    • 打印内容 print("")
  • 常量和变量的使用
    • var :修饰变量
    • let :修饰常量
    • 使用注意:
      • 优先使用常量,防止被修改
      • 常量的本质:指向的内存地址不可以修改,但是可以通过内存地址找到对应的对象,之后修改对象内部的属性
  • 数据类型
    • 整型和浮点型
    • 类型推导:
      • 如果在定义一个标识符时,如果有直接给该标识符赋值,那么会根据赋值的类型推导前面标识的类型
      • 那么这个时候标识符的类型可以省略
      • option+鼠标左键
    • 基本运算
      • swift中没有隐式类型转化
      • 所有必须保证类型一致才能进行运算
  • 逻辑分支
    • if分支
      • if后面()可以省略
      • 没有非零即真,必须有明确真假
      • Bool:true/false
    • 三目运算符
    • guard
      • guard
        • 方法return
        • 循环break/continue
        • 抛出异常throw
      • 条件为true执行语句块,条件为false执行else{}
    • switch
      • switch后面的()可以省略
      • case结束后可以不加break
      • 希望case穿透:fallthrough
      • 特殊用法
        • 判断浮点型
        • 判断字符串
        • 判断区间类型
          • 半开半闭区间 0..<10
          • 闭区间 0...10

2.循环

  • for
    • 如果一个标识符不需要使用,那么可以通过_来代替
    • 建议区间遍历
//区间遍历
for i in  0..<10 {
 print(i)
}
for _ in 0...9 {
 print("hello world")
}
  • while
    • while后面的()可以省略
    • 没有非零即真
//i最后一次打印是打印的1
var i = 10 
while i >0 {
  print(i)
  i -= 1 
}
  • do while
    • 区别:不再使用do while ——>repeat while
//m最后一次打印是打印9
var m = 0
repeat {
print(m)
m += 1
}while m < 10

3.字符串的使用

  • String
    • string 是一个结构体,性能更高
    • NSString是一个OC对象,性能略差
    • String支持直接遍历
    • Swift提供了String 和NString之间的无缝转换
  • 字符的定义
    • 定义不可变字符串 :let修饰的字符串就是不可变的
    • 定义可变字符串: var修饰的字符串就是可变的
  • 如何遍历字符串中所有字符
    for c in str.characters{
    print(c)
    }
  • 获取字符串的长度
let length = str.characters.count
  • 字符串的拼接
    • 字符串之间的拼接
    • 字符串和其他标识符之间的拼接
    • 在拼接过程中的格式化
//字符串之间的拼接
let str1 ="殷鸣"
let str2 = "李依隆"
let resultStr = str1 + str2 
//字符串和其他标识符之间的拼接
let name = "ym"
let height = 1.60
let age =28
let infoStr = "my name is \(name) ,age is \(age) ,height is \(height) "
print(infoStr)
//在拼接过程中格式化:QQ音乐分钟秒钟拼接
let min = 2
let second = 3
let timeStr = Sting(format:"%02d:%02d",arguments:[min,second])
  • 字符串的截取
    • 将string类型转成NSString类型再进行截取
      • (urlString as NSString) ——>NSString
    • 苹果原生方式进行截取
let urlString = "www.520it.com"
//方式1:将string类型转成NSString类型再进行截取
let header = (urlString as NSString ).substringToIndex(3)
let footer = (urlString as NSString).substringFromIndex(10)
let range = NSMakeRange(4,5)
let middle = (urlString as NSString).substringWithRange(range)
//方式2:swift原生方式进行截取
let headerIndex = urlString.startIndex.advanceBy(3)
let header = urlString.substringToIndex(headerIndex)
let footerIndex = urlString.endIndex.advancedBy(-3)
let footer = urlString.substringFromIndex(footerIndex)
let range = Range(start:headerIndex.advancedBy(1),end:footerIndex.advancedBy(-1)) 
//上面range方法过期了 ,苹果建议写成区间形式
let range = headerIndex.advancedBy(1)..<footerIndex.advancedBy(-1)
let middle = urlString.substringWithRange(range)

4.数组

  • 数组:是一串有序的由相同类型元素构成的集合

  • 数组中的集合元素是有序的,可以重复出现

  • swift数组类型是Array,是一个泛型集合

  • 如何定义数组

    • 定义不可变数组,使用let修饰
      • let array : Array<String> = ["why","yz","lmj","lnj"]
      • 如果直接初始化的话,可以省略: Array<String>,让其直接类型推导
      • let array :[String] = ["why","yz","lmj","lnj"]
      • let array = ["why","yz","lmj","lnj"]
    • 定义可变数组,使用var修饰
      • 数组是泛型集合,必须明确指定该数组之后存放的元素
      • var arrayM = Array<String>()
      • 简便写法:var arrayM = [String]()
      • arrayM.append("123")
  • 对可变数组的基本操作

    • 增删改查——>数据库
    • 添加元素
      • arrayM.append("lmj")
    • 删除元素
      • removeAtIndex()
      • removeAll
    • 修改元素
      • arrayM[0] = "Why"
      • arrayM
    • 根据下标获取元素
      • let item = arrayM[0]
  • 遍历数组中所有的元素(三种方式)

    • for i in 0..<array.count{
      print(array[i]获取下标值)
      }
    • for name in array {
      print("类型推导出name的类型,只能获取元素,不能获取下标值")
      }
    • 可以获取到下标值和元素
    • for(index ,name) in array .enumerate(){
      print(index)
      print(name)
      }
  • 数组的合并

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

推荐阅读更多精彩内容