美文网首页
Swift5.1教程(一)--基础内容

Swift5.1教程(一)--基础内容

作者: 开发者老岳 | 来源:发表于2020-11-25 15:52 被阅读0次

    更多教程,请关注微信号:roclel

    本次的教程是基于Swift5.1版本

    Swift是一个全新的用户iOS,MacOS,watchOS和tvOS的应用编程语言。如果你有C和Objective-C开发经验的话,Swift的许多部门会让你很熟悉。

    Swift 为所有 C 和 Objective-C 的类型提供了自己的版本,包括整型值的 Int ,浮点数值的 Double 和 Float ,布尔量值的 Bool ,字符串值的 String 。如同集合类型中描述的那样, Swift 同样也为三个主要的集合类型提供了更高效的版本, Array , Set 和 Dictionary 。

    除了我们熟悉的类型之外,Swift还增加了Objective-C 中没有的类型,元组。元组允许你创建和传递一组的数据,你可以用元组当做函数的返回值来返回多个的值

    Swift还增加了可选项,用来处理没有值的情况,它使得Swift更安全,这也充分说明swift是一门类型安全的编程语言,那么现在让我们开始swift的编程之旅吧

    常量和变量

    顾名思义,常量的值一旦设置好便不能再被更改,然而变量的值可以在将来被设置成不同的值

    声明常量和变量

    常量和变量必须在使用前被申明,使用关键字 let 来声明常量,使用关键字 var 来声明变量。下面是声明的一个例子

    let heigh = 10      //声明一个常量 不能被修改,否则会编译错误
    var weight = 10     //声明一个变量 后期可以修改
    

    类型标注

    你可以在声明一个常量或者变量的时候提供类型标注,用来确认常量或者变量能够存储值的类型。添加类型标注的方式是在常量或者变量的后面加一个冒号,然后加上一个空格,最后加上要使用的类型的名称。下面举个例子:

    var name: String = "dapeng" //声明一个String类型的变量name
    

    输出常量和变量

    你可以使用 print(_:separator:terminator:) 函数来打印当前常量和变量中的值。

    var name: String = "dapeng"
    print(name)
    //输出 dapeng
    

    Swift 使用字符串插值 的方式来把常量名或者变量名当做占位符加入到更长的字符串中,然后让 Swift 用常量或变量的当前值替换这些占位符。将常量或变量名放入圆括号中并在括号前使用反斜杠将其转义:

    var name: String = "dapeng"
    print("\(name) is very good")
    //输出 dapeng is very good
    

    注释

    使用注释来将不需要执行的文本放入的代码当中,作为标记或者你自己的提醒。当 Swift 编译器在编译代码的时候会忽略掉你的注释。swift的注释和c的注释基本相同,下面是例子

    1.单行注释

    // 这是一个注释
    

    2.多行注释

    /* this is also a comment,
    but written over multiple lines */
    

    分号

    和许多其他的语言不同,Swift 并不要求你在每一句代码结尾写分号( ; ),当然如果你想写的话也没问题。总之,如果你想在一行里写多句代码,分号还是需要的

    let cat = "mao"
    var dog = "dog"
    var people = "people";var student = "student"
    

    类型安全和类型推断

    Swift 是一门类型安全的语言。类型安全的语言可以让你清楚地知道代码可以处理的值的类型。如果你的一部分代码期望获得 String ,你就不能错误的传给它一个 Int 。

    举个例子,如果你给一个新的常量设定一个 42 的字面量,而且没有说它的类型是什么,Swift 会推断这个常量的类型是 Int ,因为你给这个常量初始化为一个看起来像是一个整数的数字

    let meaningOfLife = 42
    // meaningOfLife is inferred to be of type Int
    

    因为 Swift 是类型安全的,他在编译代码的时候会进行类型检查,任何不匹配的类型都会被标记为错误。这会帮助你在开发阶段更早的发现并修复错误。

    数值型字面量

    整数型字面量可以写作:

    1. 一个十进制数,没有前缀
    2. 一个二进制数,前缀是 0b
    3. 一个八进制数,前缀是 0o
    4. 一个十六进制数,前缀是 0x

    类型别名

    类型别名可以为已经存在的类型定义了一个新的可选名字。用 typealias 关键字定义类型别名。

    typealias mInt = Int
    var age:mInt = 10
    var age:Int = 10
    //以上两种age的声明是等同的
    

    元组

    元组把多个值合并成单一的复合型的值。元组内的值可以是任何类型,而且可以不必是同一类型。

    在下面的示例中, (404, “Not Found”) 是一个描述了 HTTP 状态代码 的元组。HTTP 状态代码是当你请求网页的时候 web 服务器返回的一个特殊值。当你请求不存在的网页时,就会返回 404 Not Found

    let http404Error = (404, "Not Found")
    // http404Error is of type (Int, String), and equals (404, "Not Found")
    

    (404, “Not Found”) 元组把一个 Int 和一个 String 组合起来表示 HTTP 状态代码的两种不同的值:数字和人类可读的描述。他可以被描述为“一个类型为 (Int, String) 的元组”

    任何类型的排列都可以被用来创建一个元组,他可以包含任意多的类型。例如 (Int, Int, Int) 或者 (String, Bool) ,实际上,任何类型的组合都是可以的。

    你也可以将一个元组的内容分解成单独的常量或变量,这样你就可以正常的使用它们了:

    let (statusCode, statusMessage) = http404Error
    print("The status code is \(statusCode)")
    // prints "The status code is 404"
    print("The status message is \(statusMessage)")
    // prints "The status message is Not Found"
    

    当你分解元组的时候,如果只需要使用其中的一部分数据,不需要的数据可以用下滑线( _ )代替:

    let (justTheStatusCode, _) = http404Error
    print("The status code is \(justTheStatusCode)")
    // prints "The status code is 404"
    

    另外一种方法就是利用从零开始的索引数字访问元组中的单独元素:

    print("The status code is \(http404Error.0)")
    // prints "The status code is 404"
    print("The status message is \(http404Error.1)")
    // prints "The status message is Not Found"
    

    你可以在定义元组的时候给其中的单个元素命名:

    let http200Status = (statusCode: 200, description: "OK")
    

    在命名之后,你就可以通过访问名字来获取元素的值了:

    print("The status code is \(http200Status.statusCode)")
    // prints "The status code is 200"
    print("The status message is \(http200Status.description)")
    // prints "The status message is OK"
    

    作为函数返回值时,元组非常有用。一个用来获取网页的函数可能会返回一个 (Int, String) 元组来描述是否获取成功。相比只能返回一个类型的值,元组能包含两个不同类型值,他可以让函数的返回信息更有用。

    可选项

    可以利用可选项来处理值可能缺失的情况。可选项意味着:这里有一个值,它等于X或者这里根本没有值

    首先明确的一个概念

    1. Objective-C中的nil:表示缺少一个合法的对象,是指向不存在对象的指针,对结构体、枚举等类型不起作用(会返回NSNotFound)
    2. Swift中的nil:表示任意类型的值缺失,是一个确定的值,要么是该类型的一个值要么什么都没有(即为nil)

    在Swift中Optional(可选类型)是一个含有两种情况的枚举,None 和 Some(T),用来表示可能有或可能没有值。任何类型都可以明确声明为(或者隐式转换)可选类型。当声明一个可选类型的时候,要确保用括号给 ? 操作符一个合适的范围。

    • 可选类型的声明
    var optionalStr: String? = "swift语言可选类型"//声明可选类型字符串,并赋初值
    var opStu:Student? //声明可选opStu对象,赋初值nil
    

    注意:在类型和 ?之间没有空格

    • 强制解析
      当你确定自定义的可选类型一定有值时,可以使用操作符(!)进行强制解析,拿到数据,叹号表示”我知道一定有值,请使用它”,但是当你判断错误,可选值为nil时使用(!)进行强制解析,会有运行错误。
    var myValue:String? = nil
    myValue="强制解析,一定有值"
    if myValue != nil {
    print(myValue!)//使用!进行强制解析
    }else{
    print("字符串为nil")
    }
    
    • 可选项绑定
      使用可选绑定,摆脱了频繁的判断是否为nil在赋值,但是使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在if和while语句中来对可选类型的值进行判断并把值赋给一个常量或者变量。

    • 格式

    if let tempStr = someOptional{
    tempStr//如果someOptiona有值的话,就会赋值给tempStr,然后使用
    }
    
    var myStr:String?
    myStr="可选绑定的值"
    if  let tempStr = myStr { //如果希望修改tempStr的值,可以定义成var
    print(tempStr)
    }else{
    print("字符串为nil")
    }
    
    
    • 隐式展开可选项
      在最初的声明时使用?修饰,当你希望它自动解析是可以用!代替?来修饰,这样在变量使用时就不需要加!来强制拆包,它会自动解析
    let possibleString: String? = "An optional string."
    let forcedString: String = possibleString! // requires an exclamation mark
    
    let assumedString: String! = "An implicitly unwrapped optional string."
    let implicitString: String = assumedString // no need for an exclamation mark
    
    print(implicitString)
    
    

    备注:教程中有关Int Double Float Bool 类型没有做详细的介绍,需要了解的小伙伴可以访问苹果开发文档中心查看相关的文档

    相关文章

      网友评论

          本文标题:Swift5.1教程(一)--基础内容

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