zoukankan      html  css  js  c++  java
  • Swift-MJ

    1.声明变量 常量

    声明变量:var age = 10

    声明常量:let age = 10 (不加分号,除非多条语句写在同一行)

    二进制前缀:0b(必须小写)

    八进制前缀:0o

    十六进制前缀:0x

    2. 基本数据类型:

    Int Float Double Bool  Character String Array Dictionary Tuple(元组类型) Optional(可选类型)

    Swift中的中包括有符号整型和无符号整型

    字符串:@"abc(x)"  x为一个整型数据或其他:在Swift中没有stringWithFormat的用法  用()代替

    1> 定义一个指定类型的变量/ 常量,如下格式:

    let age: Int = 10

    2> Swift中的小数默认为Double型,需要自行设置为Float 

    3> Swift强调语法安全:不同类型的两个变量 不能相加

    4> 浮点数可以用十进制和十六进制表示 

    十进制表示浮点数:eN:10的N次方

    // 没有指数时
    let d1 = 12.5
    // 有指数
    let d2 = 0.125e2

    十六进制表示浮点数:pN:2的N次方   d3 = (8/16 + 12) * 1 = 12.5

    let d3 = 0xC.8p0
    // d3 = 0xC.8 * 2的0次方 = 12.5

    3. Swift运算符:

    1> 赋值=:

    Swift可进行多个赋值:

    基本的逻辑运算都一些样 强调赋值运算符:

    = OC中的赋值运算符有返回值if(x = y)为永真  

    Swift中这种写法属于语法错误,Swift中=没有具体返回值

    2> 取余运算%:

    Swift可以对浮点型数据进行取余运算 

    a % b 结果所得余数的正负和a的符号一致

    3>比较运算符:

    Swift中的if语句必须是Bool型   true为真 false为假  没有C语言中非0为真的说法

    三目运算符中的条件也必须是Bool型的  比较运算符和逻辑运算符的返回值为true 和 false两种(不是1 0)

    4> 范围运算符(Swift新增)

    a...b:范围是:[a, b]

    a..<b: 范围是:[a, b)

    Swift中的for循环:

    for i in 0...5 {
    // 执行6次 :0 1 2 3 4 5
    }

    5> 溢出运算符:

    &+ &- &/ &* &%

    上溢出:最大值+1结果为0  下溢出:最小值-1结果为最大值

    4. Swift新增的特殊数据类型:

    1> 元组类型Tuple:

    定义:有N个任意类型的数据组成

    let po = (x : 12.6, y : 18 ) -----> x y是元素

    例:

    var point = (x : 10.3, y : 5)
    /**
       *获取元组类型中的元素:
        *point.x  point.y
        * point.0(获取x) point.1(获取y)
    **/ 

    用let定义一个元组之后,不可以改变其中元素的值

    下面语句错误:指定元素类型之后 不能加上元素的名称:

    var person:(Int ,String) = (age : 23, name : "ha")

    元组中:下划线可以忽略某个元素的值,以便取出其他的元素值

    6. 分支语句 循环语句:

    for ,while ,do while ,if都与OC中一样

    注:这些语句后面必须加{}

    1> for in:

    for i in 1...4 {
    // 如果不使用i 可以用下划线_替换i
    }

    2> switch:

    在Swift中:switch case后面不需要加break

    每一个case与语句后面必须加内容,不能为空的

    1》switch多条件匹配:

    case0, 1, 2:(满足三个条件中的一个 用逗号分割即可      C语言中多条件表示:case 0: case 1: case 2:  --> 比较麻烦 )

    2》switch范围匹配:

    case 0...3:      case 4...10:etc

    3》switch匹配元组:

    例:一个中心在原点:边长为4的正方形:判断一个点是否在这个矩形框中:

    let point = (1, 1)
    switch point {
    case (0, 0):
    // x可以为任意值:x轴点
    case (_, 0):
    // 在矩形框中:
    case (-2...2, -2...2):
    }

    4》case数值绑定:

    可以将switch中的值绑定给一个特定的常量或者变量,以便在case里面的语句中使用这个值

    注:fallthrough后面的case语句不能定义变量和常量:例如case let (x, y) where x == y

    let point = (10, 0)
    switch point {
    // 只要某个点的y值满足为0 就可以走下面的语句,然后获取x的值 可以进行其他的操作
    case (let x, 0):
    // 任意一个点都会走
    case let (x, y):
    }

     5》switch中添加where语句:

    case let (x, y) where x == y :

    6》fallthrough:

    作用:执行完当前的case语句,会接着执行fallthrough后面的case或者default语句(相当于C语言中没有加break语句)

    7. 加标签:

    out : for _ in 1...2 {
         for _ in 1..3 {
            print("ha")
            // break原本只能跳出内层循环    可以通过加标签 跳出外层循环
            break out
         }
         print("kk")
    }

    8. 函数:

    1> 函数定义:

    func 函数名(形参列表) -> 返回值类型 {

    函数体

    }

    形参列表:形参名1: 形参类型1, 形参名2:,  形参类型2

    无返回值:

    func 函数名(形参列表) -> () 

    func 函数名(形参列表) -> Void

    func 函数名(形参列表)

    2> 外部参数名:

    使用外部参数名的目的:就是在分不清每个形参的意义时 可以通过外部参数名提示

    如下:Age   Number就是外部参数名

    格式:外部参数名写在形参名前面 用空格隔开

    func HA(Age age : Int, Number num : Int) {
    
    }
    
    // 调用方法:
    
    HA(Age: 10, Number: 34)

    3> 默认参数值:

    在形参前面加#相当于生成一个与当前形参同名的外部参数名

    func add(name : String, age : Int = 20){
    
    }
    
    // 存在默认参数的时候,Swift会自动给它生成一个跟形参名相同的外部形参名,  调用方法的时候需要将参数名写出
    
    add("haha", age: 32)

    在带有默认参数值的形参名前面写一个下划线:_  在方法调用的时候就不用写外部参数了

    func add(name : String, _ age : Int = 20){
    
    }
    
    // 存在默认参数的时候,Swift会自动给它生成一个跟形参名相同的外部形参名,  调用方法的时候需要将参数名写出
    
    add("haha",  32)

    4> 常量参数和变量参数:
    默认情况下,函数的参数都是常量参数, 不能在函数内部修改

    如果需要在函数内部对参数进行修改,需定义为var

    5> 输入输出函数:

    swift中想要修改函数内部局部变量的值,利用输入输出函数

    输入输出函数定义:

    func swap (inout num1 : Int, inout num2 : Int)

    注:不利用第三个变量的前提下,交换两个变量的值:一:异或运算   二:和 差

    a. 传递实参的时候,必须在实参的前面加上&  

    b. 不能传入常量或者字面量(例:12)作为参数值,

    c. 输入输出参数不能有默认值 不能使用let var修饰(inout和let var 不能共存)

  • 相关阅读:
    hdu 1254 推箱子(双重bfs)
    hdu 1495 非常可乐 (广搜)
    [leetcode-687-Longest Univalue Path]
    [leetcode-686-Repeated String Match]
    POJ 2287 田忌赛马 贪心算法
    [leetcode-304-Range Sum Query 2D
    [leetcode-682-Baseball Game]
    [leetcode-299-Bulls and Cows]
    [leetcode-319-Bulb Switcher]
    [leetcode-680-Valid Palindrome II]
  • 原文地址:https://www.cnblogs.com/Evelyn-zn/p/5015774.html
Copyright © 2011-2022 走看看