swift-从零开始字符串和?,!,as的使用

Posted 火海夕

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift-从零开始字符串和?,!,as的使用相关的知识,希望对你有一定的参考价值。

子字符串

使用下标或者类似 prefix(_:) 的方法得到的子字符串是 Substring 类型
Substring 拥有 String 的大部分方法
Substring 可以转换成 String 类型

let greeting = "Hello, world!"                      // "Hello, world!"
let index = greeting.index(of: ",") ?? greeting.endIndex    // String.Index
let beginning = greeting[..<index]          // "Hello"
let newString = String(beginning)           // "Hello"

子字符串重用一部原元字符串的内容
修改字符串或者子字符串之前都不需要花费拷贝内存的代码
String 和 Substring 都遵循 StringProtocol 协议,也就是说它基本上能很方便地兼容所有接受 StringProtocol 值的字符串操作函数
字符串比较

字符串和字符相等性 == 和 !=
前缀相等性 hasPrefix(_:)
后缀相等性 hasSuffix(_:)

var welcome = "hello, world"
var welcome1 = "hello"
print(welcome == welcome1)
print(welcome.hasPrefix("hello"))   // true
print(welcome.hasSuffix("world"))   // true
  • 因为最近在学习Swift,这里根据苹果官方文档加上自己的理解,总结了下常用的as、as!、as? 这三种类型转换操作符的异同和使用方式。

    正文
    as

    keyword:Guaranteed conversion、 Upcasting
    理解:字面理解就是有保证的转换,从派生类转换为基类的向上转型
    代码:

    // 将1转成float
    let num = 1 as CGFloat
    |------------------------
    // dog转换到父类animal
    class Animal 
    class Dog: Animal 
    let d = Dog()
    d as Animal     


    as!

    keyword:Forced conversion、 Downcasting
    理解:字面理解就是有强项转换,即向下转型,子类(派生类)向父类转换,官方解释说这是一个不被保证的转换,可能会因为强转的失败而会导致崩溃。同时 ****!****是一个陷阱的标志,就像“!”一样,用起来存在一定危险性
    代码:

    // Dog到Animal的转化
    class Animal 
    class Dog: Animal 
    let a: Animal = Dog()
    a as Dog        // as不能将a转成Dog,即不能向下转换
    a as! Dog   // as!能强行将a转成Dog -> Bingo   


    as?

    keyword:*** Optional、 Nil***
    理解:Swfit代码写一段时间后会发现到处都是 ? ,这预示着如果转换不成功的时候便会返回一个 nil 对象。成功的话返回可选类型值(optional)。
    代码:

    // Dog、Cat和Animal的转换关系
    class Animal 
    class Cat: Animal 
    class Dog: Animal 
        var name = "Spot"
    
    let dog: Dog? = nil
    dog?.name       // 选择调用,返回空值nil
    dog!.name       // 强行调用,报错
    let animal: Animal = Cat()
    animal as? Dog  // 猫转狗失败,返回nil
    animal as! Dog  // 猫强行转狗,失败报错

     

以上是关于swift-从零开始字符串和?,!,as的使用的主要内容,如果未能解决你的问题,请参考以下文章

《从零开始学Swift》学习笔记(Day 52)——Cocoa错误处理模式

从零开始学Swift——语法篇 第一季-关东升-专题视频课程

《从零开始学Swift》学习笔记(Day 20)——函数中参数的传递引用

从零开始学习C语言(第二天)

《从零开始学Swift》学习笔记(Day 11)——数据类型那些事儿?

Swift学习第二枪