美文网首页
Swift之基本数据结构、控制语句

Swift之基本数据结构、控制语句

作者: 雪_晟 | 来源:发表于2017-05-04 11:48 被阅读7次

    简介:
    Swift 是一门进行 iOS 和 OS X 应用开发的新语言。然而,如果你有 C 或者 Objective-C 开发经验的话,你会发现 Swift 的很多内容都是你熟悉的。
    Swift 包含了 C 和 Objective-C 上所有基础数据类型,Int表示整型值;Double和Float表示浮点型值;Bool是布尔型值;String是文本型数据。Swift 还提供了三个基本的集合类型,Array,Set和Dictionary,详见集合类型。
    就像 C 语言一样,Swift 使用变量来进行存储并通过变量名来关联值。在 Swift 中,广泛的使用着值不可变的变量,它们就是常量,而且比 C 语言的常量更强大。在 Swift 中,如果你要处理的值不需要改变,那使用常量可以让你的代码更加安全并且更清晰地表达你的意图。
    除了我们熟悉的类型,Swift 还增加了 Objective-C 中没有的高阶数据类型比如元组(Tuple)。元组可以让你创建或者传递一组数据,比如作为函数的返回值时,你可以用一个元组可以返回多个值。
    Swift 还增加了可选(Optional)类型,用于处理值缺失的情况。可选表示“那儿有一个值,并且它等于 x ”或者“那儿没有值”。可选有点像在 Objective-C 中使用nil
    ,但是它可以用在任何类型上,不仅仅是类。可选类型比 Objective-C 中的nil
    指针更加安全也更具表现力,它是 Swift 许多强大特性的重要组成部分。
    Swift 是一门类型安全的语言,可选类型就是一个很好的例子。Swift 可以让你清楚地知道值的类型。如果你的代码期望得到一个String
    ,类型安全会阻止你不小心传入一个Int
    。你可以在开发阶段尽早发现并修正错误。

    参考文章:《The Swift Programming Language》中文版

    跟着溜一遍
    数据类型:常亮与 变量 let 用来生命常量,var 用来声明变量 一个常量的值,在编译的时候,并不需要有明确的值,但是你只能为它赋值一次。也就是说你可以用常量来表示这样一个值:你只需要决定一次,但是需要使用很多次。常量或者变量的类型必须和你赋给它们的值一样。然而,声明时类型是可选的,声明的同时赋值的话,编译器会自动推断类型。在上面的例子中,编译器推断出myVariable是一个整数(integer)因为它的初始值是整数。

    常量与变量

    最基础的数据类型 就是 常量与变量
    如果初始值没有提供足够的信息(或者没有初始值),那你需要在变量后面声明类型,用冒号分割。术语叫做 类型标注
    常量与变量名不能包含数学符号,箭头,保留的(或者非法的)Unicode 码位,连线与制表符。也不能以数字开头,但是可以在常量与变量名的其他地方包含数字。

    var welcomeMessage: String
    
    yVariable = 50
    let myConstant = 42
    let implicitInteger = 70
    let implicitDouble = 70.0
    let explicitDouble:Double = 70   //声明中的冒号代表着“是...类型”,
    

    值永远不会被隐式转换为其他类型。如果你需要把一个值转换成其他类型,请显式转换。 转换的时候➕号与 转换类型之间需要有空格
    注意:一般来说你很少需要写类型标注。如果你在声明常量或者变量的时候赋了一个初始值,Swift可以推断出这个常量或者变量的类型,请参考类型安全和类型推断。在上面的例子中,没有给welcomeMessage
    赋初始值,所以变量welcomeMessage
    的类型是通过一个类型标注指定的,而不是通过初始值推断的。

    let label = "The width is"
    let width = 94
    let witdthLabel = label + String(width)
    

    如果去掉String,会提示:MyPlayground.playground:25:25: error: binary operator '+' cannot be applied to operands of type 'String' and 'Int'

    有一种更简单的把值转换成字符串的方法:把值写到括号中,并且在括号之前写一个反斜杠。例如:
    let apples = 3
    let oranges = 5
    let appleSummaryt = "I have \(apples) apples."
    
    let fruitSummary = "I have \(apples + oranges) pieces of fruits"
    
    //练习: 使用\()来把一个浮点计算转换成字符串,并加上某人的名字,和他打个招呼。
    
    let age = 3
    let chiledName = "archy"
    let seeWhat = chiledName + " " + String(age) + " 岁了"
    

    数组与字典

    使用方括号[]来创建数组和字典,并使用下标或者键(key)来访问元素。
    var shoppingList = ["catfish","water","tulips","blue paint"]
    shoppingList[1] = "bottle of water"
    
    print(shoppingList)
    
    var occupations = [
        "Malcolm":"Captain",
        "Kaylee":"Mecahnic",
    
    ]
    
    occupations["Jayne"] = "Public Realtions"
    
    //初始化一个数组或者字典 使用初始化语法
    let emptyArray = [String]()
    //emptyArray = ["catfish","water","tulips","blue paint"]
    
    let emptyDictionary = [String:Float]()
    
    
    //如果类型信息可以被推断出来,你可以用[]和[:]来创建空数组和空字典——就像你声明变量或者给函数传参数的时候一样。
    //shoppingList = []
    //occupations = [:]
    

    控制语句:使用if和switch来进行条件操作,使用for-in、for、while和do-while来进行循环。包裹条件和循环变量括号可以省略,但是语句体的大括号是必须的。

    var optionalString:String? = "Hello"
    print(optionalString == nil)
    
    var optionalName:String? = "Jobn"
    var greeting = "hello"
    if optionalName == nil {
        greeting = "Hello, archy"
    }else{
        if let name = optionalName {
            greeting = "Hello ,\(name)"
        }
    }
    
    switch支持任意类型的数据以及各种比较操作——不仅仅是整数以及测试相等。声明'let'可用于匹配某部分固定值的模式,运行switch中匹配到的子句之后,程序会退出switch语句,并不会继续向下运行,所以不需要在每个子句结尾写break。

    不加 default 报错:error: switch must be exhaustive, consider adding a default clause

    let vegetable = "red pepper,blue pepper"
    switch vegetable {
    case "celery":
        let vegetableComment = "Add some raisins and make ants on a log."
    case "cucumber", "watercress":
        let vegetableComment = "That would make a good tea sandwich."
    case let x where x.hasSuffix("pepper"):
        let vegetableComment = "Is it a spicy \(x)?"
    default:
        let vegetableComment = "Everything tastes good in soup."
    }
    
    你可以使用for-in来遍历字典,需要两个变量来表示每个键值对。字典是一个无序的集合,所以他们的键和值以任意顺序迭代结束。
    let intetestingNumbers = [
        "Prime": [2,3,5,7,11,13],
        "Fibonacci": [1,1,2,3,5,8],
        "Square": [1,4,9,16,25],
    ]
    // kind  numbers 对应键值对
    var largest = 0
    var largestName = String()
    
    for (kind, numbers) in intetestingNumbers{
        for number in numbers{
            if number > largest {
                 largest = number
                largestName = kind;
            }
        }
    }
    
    print("largestName + \(largest) ")
    
    do while 由repeat while 来代替
    var n = 2
    while n < 100 {
        n =  n * 2
    }
    print(n)
    
    var m  = 2;
    // do while  由repeat  while 来代替
    repeat {
        m = m * 2
    }while m < 100
        print(m)
    
    for 循环你可以在循环中使用..<来表示范围,也可以使用传统的写法,两者是等价的,比如下面 0 与4 中间是不可以由空格的,否则会报语法错误

    使用..<创建的范围不包含上界,如果想包含的话需要使用...。0...2 表示的是 1 和 2 ,0..<2 表示的是 1

    var  firstForLoop = 0
    for i in 0..<2 {
        firstForLoop += i
    }
    print(firstForLoop)
    

    相关文章

      网友评论

          本文标题:Swift之基本数据结构、控制语句

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