美文网首页
#1极速学习Swift

#1极速学习Swift

作者: Bryant_2423 | 来源:发表于2017-08-23 11:07 被阅读0次

    Swift这门语言我不想多介绍了,只要你有一定的编程基础,学习swift将会是一个轻松愉快的过程。

    本次的内容:

    • 变量,常量与类型推断
    • 基本字符串操作
    • 数组
    • 字典
    • 集合
    • 方法
    • 控制流

    变量,常量与类型推断

    Swift中,定义变量使用var, 常量使用let. 比如:

    var variable:String = "Hello,Swift!"
    let constant:Int = 100
    

    Swift中的基本类型为几下几种:

    • Int
    • Double
    • Bool
    • String

    Swift有一个特性——类型推断
    也就是说Swift可以自动推导出你所给的变量是什么类型!那么上面两行代码可以改为:

    var variable = "Hello,Swift!"
    let constant = 100
    

    基本字符串操作

    定义2个字符串:

    let message1 = "Swift is awsome! "
    let message2 = "What do you think? "
    

    如何连接两个字符串?+即可:

    let message1 = "Swift is awsome! "
    let message2 = "What do you think? "
    var combineMessage = message1 + message2
    print(combineMessage) //输出结果为“Swift is awsome! What do you think? \n”
    

    如何比较两个字符串是否相等?==即可:

    let string1 = "Swift"
    let string2 = "Swift"
    if string1 == string2{
       print("Both are same!") //因为2个字符串一样,所以会输出"Both are same!\n"
    }
    

    计算字符串字符个数

    let message1 = "Hello"
    message1.characters.count //返回值会是5
    

    数组

    Swift中定义数组的方式有点像OC。举个例子:
    Objective C:
    NSArray *recipes = @[@"Burger",@"Full Breakfast",@"Ham and Egg Sandwich"];

    Swift:
    var recipes = ["Burger","Full Breakfast","Ham and Egg Sandwich"]
    有一点需要注意:**与OC不同,Swift数组中的值只能是同一个类型,比如上述代码的变量recipes里面的值只能是String类型. 因为Swift有类型推断,数组recipes会被自动推断为字符串数组。

    Swift中提供了许多方法对数组进行操作,比如:
    常用范例1:求数组中元素的个数

    var recipes = ["Burger","Full Breakfast","Ham and Egg Sandwich","Milk"]
    recipes.count
    //返回值会是3
    

    常用范例2:为数组中添加元素

    var recipes = ["Burger","Full Breakfast","Ham and Egg Sandwich"]
    //格式:recipes += ["你想添加的1个或多个元素"]
    recipes += ["Cake"]
    recipes += ["Beef","Vegetable Salad"]
    

    常用范例3:访问或修改数组中的某个元素

    //取出数组的第0位
    var recipeItem = recipes[0]
    //修改数组的第1位
    recipes[1] = "Full Dinner"
    //修改数组的1到3位
    recipes[1...3] = ["Cheese Cake","Greek Salad","Braised Beef Cheeks"] 
    

    那么现在数组recipes中的元素应该是这样的:

    • Burger
    • Cheese Cake
    • Greek Salad
    • Braised Beef Cheeks

    字典

    Swift提供几种最常用的集合类型:数组,字典,集合现在我们来谈一谈字典。字典中每个vaule都会与一个key成对出现。举个例子:

    var companies = ["KEY":"VAULE","APPL":"Apple Inc","GOOL":"Google","FB":"Facebook"]
    

    那么把字典的定义格式总结出来便是这样的:

    let dictionary = [KEY:VAULE,KEY2:VAULE2.....]
    

    常用范例1:遍历一个字典

    for (key,vaule) in companies{
         print("key is \(key),vaule is \(vaule)")
    }
    

    常用范例2:遍历字典中的key或vaule

    //遍历key
    for key in companies.keys{
         print("stock code is \(key)")
    }
    
    //遍历vaule
    for vaule in companies.vaules{
         print("name is \(vaule)")
    }
    

    常用范例3:为字典修改或添加一组key,vaule

    //添加格式:dictionary[你要添加的key] = 你所要添加的vaule
    companies["AMZN"] = "sdfsdd"
    
    //修改格式:dictionary[字典中你要修改的key] = 你所要修改的vaule
    companies["AMZN"] = "Amazon.com Inc"
    

    集合

    Swift中集合的定义很像数组,但与数组有2点不同:

    1. 数组是有序的,集合是无序的!!!
    2. 数组可以使用类型推断,集合不能,必须声明类型否走会被视为是一个数组!
      举个例子:
    //定义集合
    let set1:Set = [1,3,5,7,9]
    //定义数组
    let array = [1,3,5,7,9] 
    //把上面2调代码放入playground里面,看看有什么不同
    

    常用范例1:为集合添加元素

    set1.insert = (11)
    

    常用范例2:比较2个集合

    let set2 = [2,3,5,15,8]
    //求出2个集合的相同部分
    set1.intersection(set2)
    
    //求出2个集合不同的部分
    set1.symmetricDifference(set2)
    

    上述代码第1段的返回值会是:
    {3,5}
    第二段代码的返回值为:
    {1,7,9,2,15,8}


    在Swift中定义一个类,我们使用class关键字,举个例子:

    class Recipe{
          var name:String = ""
          var price:Int = 10
          var ingredients = ["egg"]
    }
    

    在swift中,有一点必须要注意:每个属性你都必须给它一个初始值!那如果我不想给它初始值该怎么办?使用可选类型你可能会为此感到疑惑,其实很简单,就是在变量的类型后面加上一个+. 可选类型以后会提到,现在不理解没关系,那么上面的Recipe可变为:

    class Recipe{
          var name:String?
          var price:Int = 10
          var ingredients:[String]?
    }
    

    上面的代码中,变量name和数组ingredients都被赋了1个默认值nil可以把它理解为“空的”吧。这是可选类型,我们将会在下一章讨论。把一个类实例化可以这么写:

    var aRecipe = Recipe() //实例化一个类
    aRecipe.name = "Ham" //使用“点语法”访问每个属性
    aRecipe.price = 20
    aRecipe.ingredients = ["egg","vegetable","potato"]
    

    Swift允许你对类进行继承并采用协议。举个例子:我要定义一个myView的类,这个类要继承自UITableViewController这个类,并采用UITableViewDataSourceUITableViewDelegate两个协议的话,可以这么写:

    class: UITableViewController,UITableViewDelegate,UITableViewDataDource
    

    有两点需要注意:

    1. 在定义一个类并继承与别的类,并采用别的协议的时候,必须先把继承的类名写在协议前面!
    2. 在swift语言中,实现了单继承机制,但是允许不继承,没有任何继承的类为基类;有继承的类为子类,被继承的类为该子类的父类:我们称父类派生了子类,子类继承了父类。

    方法

    在Swift允许你在类,结构体,枚举中定义方法。我们使用func关键字定义方法。下面举个例子,在类中定义一个没有返回值的方法:

    class learnMethods{
           func saySomething(){
                  print("Swift is future")
           }
    }
    

    Swift中使用点语法来调用方法:

    let say = learnMethods()
    say.saySomething()
    

    下面我们在类中写个带返回值的方法:

    class learnMethods2{
          func sayMyName(name:String)  -> Int {
               print("Hello\(name)!")
               return name.characters.count
          }
    }
    

    返回值的语法可能有点怪,使用->来申明返回值的类型。我们来总结一下方法的定义规则:

    func 函数名(参数名:参数类型) -> 返回值类型{
    
    }
    

    把下面这段代码在playground的中练一练:

    let learn = learnMethods2()
    let temp = learn.sayMyName(name:"Bryant")
    print(temp)
    

    看看控制台的输出结果和旁边显示栏的返回值。


    控制流

    Swift的控制流语法比较像C,我们来看一看。

    for循环当你只是想迭代一个范围内的数据时,我们使用.....<来确定这组数句的范围。...开区间..<闭区间。如何区别.....<二者呢?举个例子:

    for i in 1..<5{
         print("index = \(i)")
    }
    

    输出的结果会是:

    index = 1
    index = 2
    index = 3
    index = 4

    当我们使用...时:

    for i in 1...5{
         print("index = \(i)")
    }
    

    输出结果会是:

    index = 1
    index = 2
    index = 3
    index = 4
    index = 5
    现在明白2者的区别了吧!

    is-else语句 功能与C,OC,Java相同不做过多介绍,语法也十分相似。
    举个例子:

    var bookPrice = 1000
    if bookPrice >999{
       print("It's too expensive!")
    }else{
        print("I can pay for it! ")
    }
    

    同样你也可以使用else-if语句。

    switch语句switch语句与OC相比有了一个巨大的提升,Let's take a look!

    let name1 = "Jerry"
    switch name1 {
    case "Bryant":
        print("Sounds cool!")
    case "Jerry":
        print("Sounds interresting!")
    case "Jack":
        print("It's boring!")
    default:
        print("I don't know!")
    } 
    

    如果你学过别的编程语言,你看到有什么不同的地方吗???
    首先,Swift支持对字符串进行处理;其次,发现没有每个case后面不用加break,如果你学过C或别的语言,你便知道switch语句中每个条件后面是要加break的,如果不加,系统会视为继续判断下一个条件。Swift不同,只要你符合了其中的1个条件,会立马退出,即使下面有同样符合的条件也不会进行判断了所以每个case后面不必要加break. 为了更好的理解,再举个栗子:

    let Number = 99
    switch Number {
    case 0...100:
        print("The number is between 0 to 100")
    case 1...99:
        print("The number is between 0 to 99")
    default:
        break
    }
    

    把这段代码打到playground中试一试,常量Number2个条件都符合,输出的确实The number is between 0 to 100就是因为Number符合了第1个条件,所以立马跳出switch语句,不会对下面的条件再做判断。上面这段代码也说明Swift的switch语句十分强大,可以支持开区间闭区间


    这些资料大部分都是我个人通过阅读官方文档,查阅资料所整理出来最精华的部分,如果你喜欢的话,可以关注我的专题

    相关文章

      网友评论

          本文标题:#1极速学习Swift

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