美文网首页
从零学习Swift 01:了解基础语法

从零学习Swift 01:了解基础语法

作者: 小心韩国人 | 来源:发表于2020-04-02 18:09 被阅读0次

一:常量

  • 1.只能赋值一次
  • 2.值不要求在编译期间就确定,也就是说可以是编译期,也可以是运行期再确定. 但是在使用前必须赋值
  • 3.常量变量在初始化之前都不能使用

二:常见的数据类型

Swift中的数据类型分为两种值类型引用类型:


可以看到,没有了OC中的基本数据类型了,OC中的基本数据类型都变成了结构体类型.

思考一下?:为什么Int这种简单的数据类型也要用结构体?

  1. 整数类型又分为:
    Int 8 :8位,一个字节
    Int 16 :16位,2个字节
    Int 32 :32位,4个字节
    Int 64:64位,8个字节
    UInt 8 ,UInt 16 ,UInt 32 ,UInt 64 :无符号整数类型 (u : unsigned)

  2. 浮点类型:
    Float :32位,精度只有6有位
    Double :64位,精度至少15位

3.浮点类型有多种表达方式:

  • 十进制表示:
    314.0 = 3.14e2 : 3.14e2 表示:3.14 乘以 10 的 2 次方
    0.0314 = 3.14e-2:3.14e-2 表示:3.14 乘以 10 的 -2 次方

  • 十六进制表示:
    40.0 = 0xAp2:0xAp2 表示: 0xA 乘以 2 的 2 次方
    2.5 = 0xAp-2:0xAp-2 表示: 0xA 乘以 2 的 -2 次方

三:元组 (Tuple)

元组就是将多个类型组合成一个对象:

  1. 元组的定义和访问
    //定义元组
    let resultTuple = (14,"Tom")
    //通过下标访问元素
    print("age is \(resultTuple.0) name is \(resultTuple.1)")
    
    //定义有标签的元组
    let resultTuple2 = (age: 22 , name: "Jack")
    //通过标签访问元素
    print("age is \(resultTuple2.age) name is \(resultTuple2.name)")
  1. 元组分解:
    let (age , name) = resultTuple2
    print("age is \(age) name is \(name)")
  1. 使用场景:
    3.1 作为函数的返回值(多个返回值)和参数
func funcTest(v1: Int, v2: String) -> (result1: Int, result2: String){
    
    //定义元组
    let resultTuple = (14,"Tom")
    //通过下标访问元组
    print("age is \(resultTuple.0) name is \(resultTuple.1)")
    
    //定义有标签的元组
    let resultTuple2 = (age: 22 , name: "Jack")
    print("age is \(resultTuple2.age) name is \(resultTuple2.name)")
    
    let (age , name) = resultTuple2
    print("age is \(age) name is \(name)")

    return resultTuple
    
}
funcTest(v1: 22, v2: "Jcak")

3.2 值绑定

//元组值绑定
func tupleTest(){
    let point = (8,8)
    switch point {
    case (let x,0):
        print("点在 y 轴上 x坐标为\(x)")
    case (0, let y):
        print("点在 x 轴上 坐标为\(y)")
    case (0...8,0...8):
        print("坐标在 0 ~ 8 范围内")
    case(let x, let y):
        print("x坐标为\(x) , y坐标为\(y)")
    }
}

三:流程控制

    1. if,while后面的条件语句可以省略小括号.
    1. swift 3以后省略了++,--运算符,使用-=, +=代替
    1. for循环使用区间运算符
      • 1.1...3:闭区间,取值1,2,3
      • 2.1..<3:半开区间,取值1,2
      • 3....3:单侧区间,让区间朝一个方向尽可能远,只要不越界
  • 4.带间隔的区间值

func test(){
    let finish = 12
    let interval = 3

    // 从6开始,到12为止,间隔 3 打印,包括 12
    for i in stride(from: 6, through: finish, by: interval){
        print(i)
    }

    print("---------------------")

    // 从6开始,到12为止,间隔 3 打印,不包括 12
    for i in stride(from: 6, to: finish, by: interval){
        print(i)
    }
}
  • 5.switch
    - 1switch必须要保证能处理所有情况
    - 2switch中的casedefault后面不能写大括号
    - 3.switch可以默认不写break,不会贯穿到最后面
    如果想要实现贯穿效果,可以使用fallthrough
    - 4.case,default后面至少要有一条语句
    - 5.switch也支持Character,String类型
    - 6.switch同样支持区间匹配0...3,元组匹配(-2...2,-2...2)

四:函数

4.1 函数的定义

func sum(v1: Int, v2: Int) -> Int{
    v1 + v2
}
print(sum(v1: 10, v2: 20))

无返回值的三种写法:

func returnVoid1(v1: String) -> (){
   //无返回值 可直接空元组
}

func returnVoid2(v1: String) -> Void{
   //无返回值 Void
}

func returnVoid3(v1: String){
   //无返回值 什么也不写
}

4.2 参数标签

func sum3(v1: Int , v2: Int) -> Int{
    v1 + v2
}

//参数标签 v1 , v2
sum3(v1: 10, v2: 20)

可使用_省略参数标签

//参数标签
func sum3(_ v1: Int , _ v2: Int) -> Int{
    v1 + v2
}

//省略参数标签 v1 , v2
sum3(10, 20)

4.3 可变参数

//可变参数
func sum1(numbs:Int...) -> Int{
    var sum = 0
    for number in numbs{
        sum += number
    }
    return sum
}

print(sum1(numbs: 10,20,30))

需要注意的是:一个函数最多只能有1个可变参数,且紧跟在可变参数后面的参数不能省略参数标签,因为一旦省略可变参数后面参数的参数标签,编译器就无法判断给哪个形参赋值

4.4 swift 自带 print 函数

public func print(_ items: Any..., separator: String = " ", terminator: String = "\n")

其实print函数的第一个参数就是一个可变参数.后面两个参数都已经设置了默认值,分别是间隔符和换行符号.我们可以自己更改后面两个参数:

4.5 输入输出参数 (In-Out Parameter)
swift中函数的参数默认是let(常量),并且规定只能是常量:

所以,如果我们想要在函数内部修改外部实参的值,就需要用inout定义一个输入输出参数:

//输入输出参数
var num = 10
func inOutTest(_ v1: inout Int){
    v1 = 20
}
inOutTest(&num)

注意:
1: inout 参数不能有默认值
2: inout 参数只能传入可以被多次赋值的
3: 可变参数不能标记为inout
4: inout 参数本质是 地址传递 (引用传递).这一点我们可以通过汇编证明:
我们在inOutTest(&num)处打一断点,进入汇编代码如下:

汇编分析 inout 参数

五:函数类型 (Function Type)

函数类型由 参数类型 + 返回值类型组成:

func sum(v1: Int, v2: Int) -> Int{
    v1 + v2
}

//定义一个类型为 (Int,Int) -> Int 的函数常量 fn , 并把 sum 函数赋值给 fn
let fn:(Int,Int) -> Int = sum

//调用 fn,并且不需要写 参数标签
let num = fn(2,3)
print(num)

函数类型作为参数使用:

//函数类型作为参数使用
func funcTypeTest(_ fn: (Int,Int) -> Int, v2: Int ,v3: Int) -> Int{
    //调用作为参数传入的函数 fn
    fn(v2,v3)
}

let rel = funcTypeTest(sum, v2: 5, v3: 5)
print(rel)

函数类型作为返回值使用:

////函数类型作为 返回值
func funcTypeTest2(_ v1: String) -> (Int,Int) -> Int{
    func plus (_ v1: Int, _ v2: Int) -> Int{
        v1 + v2
    }
    
    func sub (_ v1: Int, _ v2: Int) -> Int{
        v1 - v2
    }
    
    switch v1 {
    case "+":
        return plus
    case "-":
        return sub
    default:
        return plus
    }
    
}

let rel2 = funcTypeTest2("+")(1,1)
print(rel2)

相关文章

  • 从零学习Swift 01:了解基础语法

    一:常量 1.只能赋值一次 2.值不要求在编译期间就确定,也就是说可以是编译期,也可以是运行期再确定. 但是在使用...

  • 视频教程Swift零基础学习之Tab Bar App

    视频教程Swift零基础学习之Tab Bar App 之前的文章主要介绍swift的语法,本篇将带领大家从UI层面...

  • Swift学习记录 Project 6

    从100 Days of Swift中学习,实践 目前正在学习swift , 刚刚接触了解了一部分语法后就因为自己...

  • Swift学习记录 Day 4

    从100 Days of Swift中学习,实践 目前正在学习swift , 刚刚接触了解了一部分语法后就因为自己...

  • 学习Swift

    LearnSwiftEasily 用心记录自己学习Swift的心得体会,让学习变得简单与快乐! Swift基础语法...

  • swift 基础语法

    swift 基础语法

  • Hello World

    当前篇:Hello World下一篇:造物之初 欢迎来到Swift基础教学,我将带领你从零基础开始学习Swift语...

  • Swift语法 -- [01 - 基础语法]

    1.简单值 使用 let来声明一个常量,用 var来声明一个变量, 它的值不要求在编译时期确定,但使用之前必须赋值...

  • 机器人深度学习--学习计划

    √ 表示完成,▶表示正在进行 f 在机器学习前 - (零基础) Python基础语法(√) 了解数据结构 (Num...

  • ios- (5天)OC快速转Swift心得

    1.首先要简单了解下swift的基本语法,有点像js 2.然后查看一些OC转swift的博客文章了解swift基础...

网友评论

      本文标题:从零学习Swift 01:了解基础语法

      本文链接:https://www.haomeiwen.com/subject/wryqxhtx.html