• swift-基础部分


    变量常量,注释,分号,整数,浮点数。数值行类型转换,类型别名,波尔值,元组,可选,断言

    //
    //  main.swift
    //  swift1
    //
    //  Created by tqh on 15/6/8.
    //  Copyright (c) 2015年 tqh. All rights reserved.
    //

    import Foundation

    println("Hello, World!")

    /**
    *  常量和变量
    */


    //1.声明常量和变量
    let maximumNumberOfLoginAttempts = 10 //常量,不能重新赋值
    var currentLoginAttempt = 0           //变量,可改变

    var x = 0.0,y = 0.0,z = 0.0  // 一行中声明多个常量或者多个变量

    //注意:如果你的代码中有不需要改变的值,请使用 let 关键字将它声明为常量。只将需要 改变的值声明为变量。

    //2.类型标注

    //当你声明常量或者变量的时候可以加上类型标注(type annotation),说明常量或者变量中要存储的值的类型。

    //声明一个类型为 String,名字为 welcomeMessage 的变量。
    var welcomeMessage : String //如果要添加类型标注,需要在常量或者变量名后面加上一个冒号和空格,然后加上类型名称。

    welcomeMessage = "hello" //(一般来说你很少需要写类型标注。)

    //3.常量和变量的命名

    //你可以用任何你喜欢的字符作为常量和变量名,包括 Unicode 字符(不能将常量与变量进行互转)
    //常量与变量名不能包含数学符号,箭头,保留的(或者非法的)Unicode 码位,连线与制表符。也不能以数字开头,但是可以在常量与变量名的其他地方包含数字。
    let n = 3.14159
    let 你好 = "你好世界"
    let ??? = "haha" //(可以用中文问号)

    //4.输出常量和变量

    println(welcomeMessage) //索引不出来 输出"hello"
    println("haha")
    println("The curr ent value of f riend lyWel come is (welcomeMessage)")//将常量或变量名放入圆括 号中,并在开括号前使用反斜杠将其转义:

    /**
    *  注释
    */

    //这是一个注释

    /* 这是一个
    多行注释 
    */

    /*这是一个多行注释的开头
    /*这是第二个被嵌套的多行注释
    */
    这是一个多行注释的结尾(嵌套注释)*/


    /**
    *  分号(有一种情况下必须要用分号,即你打算在同一行内写多条独立的语句:)
    */

    let cat = "? ???"; println( cat) // 输出 "????"

    /**
    *  整数
    */

    //整数范围

    let minValue = UInt8.min // minValue 为 0,是 UInt8 类型的最小值
    let maxValue = UInt8.max // maxValue 为 255,是 UInt8 类型的最大值

    /**
    *  浮点数 (注意:Double 精确度很高,至少有 15 位数字,而 Float 最少只有 6 位数字。选择哪个类型取决于你的代码需要处理的值的范围。)
    */

    //- Double 表示 64 位浮点数。当你需要存储很大或者很高精度的浮点数时请使用此类型。
    //- Float 表示 32 位浮点数。精度要求不高的话可以使用此类型。

    /**
    *  类型安全和类型推测
    */

    /**
    *  数值型字面量
    */

    //- 一个十进制数,没有前缀
    //- 一个二进制数,前缀是 0b 
    //- 一个八进制数,前缀是 0o
    //  - 一个十六进制数,前缀是 0x

    let decimalInteger = 17
    let binaryInteger = 0b10001 // 二进制的 17
    let octalInteger = 0o21 // 八进制的 17
    let hexadecimalInteger = 0x11 // 十六进制的 17

    /*
    如果一个十进制数的指数为 exp,那这个数相当于基数和$10^{exp}$的乘积:
    1.25e2 表示 $1.25×10^{2}$,等于 125.0。
    1.25e-2 表示 $1.25×10^{-2}$,等于 0.0125。

    如果一个十六进制数的指数为 exp,那这个数相当于基数和$2^{exp}$的乘积:
    0xFp2 表示 $15×2^{2}$,等于 60.0。
    0xFp-2 表示 $15×2^{-2}$,等于 3.75。
    */

    //十进制的 12.1875:
    let decimalDouble = 12.1875
    let exponentDouble = 1.21875e1
    let hexadecimalDouble = 0xC.3p0

    //数值类字面量可以包括额外的格式来增强可读性。整数和浮点数都可以添加额外的零并且包含下划线,并不会影响字面量:

    let paddedDouble = 000123.456
    let oneMillion = 1_000_000
    let justOverOneMillion = 1_000_000.000_000_1

    /**
    *  数值类型转换
    */

    //1.整数转换

    //let cannotBeNegative: UInt 8 = - 1
    // UInt8 类型不能存储负数,所以会报错
    //let tooBig: Int8 = Int8.max + 1
    // Int8 类型不能存储超过最大值的数,所以会报错

    let twoThousand: UInt16 = 2_000
    let one: UInt8 = 1
    let twoThousandAndOne = twoThousand + UInt16(one)

    //2.整数和浮点数转换

    let three = 3
    let pointOneFourOneFiveNine = 014159
    let pi = Double(three) + Double(pointOneFourOneFiveNine) //照着教程的只写一个Double怎么不行
    let integerPi = Int(pi)

    /**
    *  类型别名
    */

    //类型别名(type aliases)就是给现有类型定义另一个名字。你可以使用 typealias 关键字来定 义类型别名。

    typealias AudioSample = UInt16

    var maxAmplitudeFound = AudioSample.min //定义了一个类型别名之后,你可以在任何使用原始名的地方使用别名:


    /**
    *  布尔值
    */

    let orangesAreOrange = true
    let turnipsAreDelicious = false

    if turnipsAreDelicious {
        println("Mmm, tasty turnips!")
    else {
        println("Eww, turnips are horrible.")
    }

    /**
    *  元组(元组在临时组织值的时候很有用)
    */

    let http404Error = (404"Not Found")//这个元组可以被描述为“一个类型为(Int, String)的 元组”。

    let (statusCode, statusMessage) = http404Error
    println ("The stat us c ode i s (statusCode) ")
    // 输出 "The status code is 404"
    println ("The stat us m essag e is (statusMessage )")
    // 输出 "The status message is Not Found"

    //如果你只需要一部分元组值,分解的时候可以把要忽略的部分用下划线(_)标记:
    let (justTheStatusCode, _) = http404Error
    println ("The stat us c ode i s (justTheStatusCode)")
     // 输出 "The status code is 404"

     println ("The stat us c ode i s (http404Error.0)" )
    // 输出 "The status code is 404"
     println ("The stat us m essag e is (http404Error.1)")
    // 输出 "The status message is Not Found"

    /**
    *  可选(optionals)
    */

    //1.字符串-int
    let possibleNumber = "123"
    let convertedNumber = possibleNumber.toInt()
    // convertedNumber 被推测为类型 "Int?", 或者类型 "optional Int"


    //2.if 语句以及强制解析

    if (convertedNumber != nil) { //和教程有点不一样呀
        println("(convertedNumber)has an integer value of (convertedNumber!)")
        } else {
        println("(possibleNumber) could not be converted to an integer")
        }

    //3.可选绑定

    //if let constantName == someOptional {
    //    statements
    //}

    if let actualNumber = possibleNumber.toInt() {
        println("(possibleNumber)has an integer value of (actualNumber)")
    else {
    println("(possibleNumber) could not be converted to an integer")
    }

    //nil 
    var serverResponseCode: Int? = 404
    // serverResponseCode 包含一个可选的 Int 值 404
    //如果你声明一个可选常量或者变量但是没有赋值,它们会自动被设置为 nil:

    var surveyAnswer: String?
    // surveyAnswer 被自动设置为 nil

    //隐式解析可选(把想要用作可 选的类型的后面的问号(String?)改成感叹号(String! )来声明一个隐式解析可选。)
    //如果你在隐式解析可选没有值的时候尝试取值,会触发运行时错误。和你在没有值的普通可选后面加一个惊叹号一样。

    let possibleString: String? = "An optional string."
    println(possibleString!) // 需要惊叹号来获取值
     
    // 输出 "An optional string."
    let assumedString: String! = "An implicitly unwrapped optional string."
    println(assumedString) // 不需要感叹号
    // 输出 "An implicitly unwrapped optional string."


    if (assumedString != nil) {
     println(assumedString)
    }
     // 输出 "An implicitly unwrapped optional string."
    if let definiteString = assumedString {
        println( definiteString)
         }
    // 输出 "An implicitly unwrapped optional string."

    /**
    *  断言(assertion)
    */

    let age = -3
    assert(age >= 0"A person's age cannot be less than zero")
    // 因为 age < 0,所以断言会触发结束应用。
    assert( age >= 0)//最简单写法

    /**
    *  何时使用断言
    */
    //1.- 整数的附属脚本索引被传入一个自定义附属脚本实现,但是下标索引值可能太小或者太 大。
    //2.- 需要给函数传入一个值,但是非法的值可能导致函数不能正常执行。
    //3.- 一个可选值现在是 nil,但是后面的代码运行需要一个非 nil 值。

  • 相关阅读:
    Longest Substring Without Repeating Characters
    Valid Palindrome
    Longest Common Prefix
    模型压缩之网络剪枝(Network Pruning)篇
    不使用现有检测框架实现一个简单的物体检测网络
    Mac 上传本地项目到GitHub
    Ubuntu 解决Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend)
    github clone 速度慢解决方法
    bibitem格式参考文献批量生成
    python matplotlib给图中的点加标签
  • 原文地址:https://www.cnblogs.com/hxwj/p/4562337.html
Copyright © 2020-2023  润新知