zoukankan      html  css  js  c++  java
  • 冷市攻略:Listo 教你 25 今天的社会 Swift 语言 - 02 Swift Tour

    import Foundation


    //***********************************************************************************************

    //1.Hello world

    //_______________________________________________________________________________________________

    //输出 "Hello, world"

    println("Hello, world")    //使用 println 函数来输出字符串


    //***********************************************************************************************

    //2.Simple Values(简单值)

    //_______________________________________________________________________________________________

    //使用 let 命名常量,使用 var 命名变量

    let myConstant =42

    var myVariable =42

    myVariable = 50

    println("The constant is(myConstant),the variable is(myVariable)")


    //_______________________________________________________________________________________________

    //声明数据类型

    let explicitDouble:Double = 70

    println("The Double type number is(explicitDouble)")


    //_______________________________________________________________________________________________

    //类型转化

    let label = "The width is "

    let width =94

    let widthLabel = label + String(width)     //不同类型数据进行基本运算的时候须要进行类型转化

    println(widthLabel)


    //_______________________________________________________________________________________________

    //简单的字符串引用数据

    let apples =3

    let appleSummary ="I have (apples) apples"

    println(appleSummary)


    //_______________________________________________________________________________________________

    //数组创建和使用

    var shoppingList = ["water","bread", "milk","paper", "pen"]

    println(shoppingList[2])           //获取数组中的第三个元素


    //_______________________________________________________________________________________________

    //字典的创建和使用

    var occupations = ["Malcolm":"Captain", "Kaylee":"Mechanic"]

    occupations["Jayne"] ="Public relations"      //给字典加入或者改动一个元素。系统检索字典 occupations是否包括 key Jayne,假设有进行 key 相应的 value 值的改动,假设没有,进行新的 key value 的加入

    println(occupations)


    //_______________________________________________________________________________________________

    //创建空的数组和字典

    let emptyArray = [String]()    //创建空的数组

    let emptyDictionary =Dictionary<String,Float>()       //创建空的字典


    //***********************************************************************************************

    //3.Control Flow(控制流)

    //_______________________________________________________________________________________________

    //简单的控制语句

    let individualScores = [75,43, 103, 87, 12]

    var teamScore =0

    for score inindividualScores{

       if score > 50{             //if 语句之后必须为返回一个 Bool类型的数据

           teamScore += 3

        }

       else{

           teamScore += 1

        }

    }

    println("The teamscore is(teamScore)")


    //_______________________________________________________________________________________________

    //可选类型数据

    var optionalString:String?

    = "Hello"

    optionalString == nil       //设置 optionalString数据为可选类型数据,可选类型是指 optionalString有详细的值或者为空两种情况


    var optionalName:String? = "Joho Appleseed"

    var greeting ="Hello"

    if let name =optionalName{        //使用 if let 来推断可选类型数据是否有详细的值

       greeting = "Hello,(name)"

    }

    println(greeting)


    //_______________________________________________________________________________________________

    //switch 语句

    let vegetable ="red pepper"

    var vegetableComment:String

    switch vegetable{          //使用 switch 语句。每一条 case 代表一条推断。符合条件则运行语句

        case"celery":

            vegetableComment ="Add some raisins and make ants on a log."

        case"cucumber","watercress":

            vegetableComment ="That would make a good tea sandwich."

        caselet x where x.hasSuffix("pepper"):            //使用 "x.hasSuffix("***")"函数来推断 x 变量末尾是否为 ***

            vegetableComment ="Is it a spicy (x)?

    "

        default:

            vegetableComment ="Everything tastes good in soup."

    }

    println(vegetableComment)


    //_______________________________________________________________________________________________

    //使用 for in

    let interestingNumbers = ["Prime": [2,3, 5, 7, 11, 13],"Fibonacci": [1,1, 2, 3, 5, 8],"Square": [1,4, 9, 16, 25],]

    var largest =0

    for (kind, numbers)in interestingNumbers{

       for number in numbers{

           if number > largest{

               largest = number

            }

        }

    }

    println("The largest number is(largest)")


    //_______________________________________________________________________________________________

    //使用 while do while 语句

    var n =2

    whilen < 100{

       n = n * 2

    }

    println("the n is(n)")


    var m =2

    do{

       m = m * 2

    }while m < 100

    println("the m is(m)")


    //_______________________________________________________________________________________________

    //范围运算符

    var firstForLoop =0

    for iin 0..<4{            //使用 "..<"表示前闭后开范围

        firstForLoop += i

    }

    println("firstForLoop is(firstForLoop)")


    var secondForLoop =0

    forvar i = 0; i <4; ++i{      //使用一般方法进行运算

        secondForLoop += i

    }

    println("secondForLoop is(secondForLoop)")


    var thirdForLoop =0

    for iin 0...4{            //使用 "..."表示前闭后闭范围

        thirdForLoop += i

    }

    println("thirdForLoop is(thirdForLoop)")


    //***********************************************************************************************

    //4.Function and Closures(函数和闭包)

    //_______________________________________________________________________________________________

    //函数的创建和使用

    func greet(name: String, day: String) -> String{        //使用 "func 函数名(參数) -> 返回值类型{ return *** }" 来创建一个函数

        return"Hello (name), today is (day)"

    }

    println(greet("Bob","Tusday"))


    //_______________________________________________________________________________________________

    //无參数的函数

    func getGasPrices() -> (Double,Double, Double){       //函数參数为空

        return (3.59,3.69, 3.79)

    }

    println(getGasPrices())


    //_______________________________________________________________________________________________

    //不确定參数的函数

    func sumOf(numbers:Int...) -> Int{        //当函数參数不确定数量的时候,使用 "..."就可以

       var sum = 0

       for number in numbers{

            sum += number

        }

       return sum

    }

    println(sumOf(234,34,12))


    //_______________________________________________________________________________________________

    //函数嵌套

    func returnFifteen() ->Int{

       var y = 10

       func add(){

            y +=5

        }

       add()

       return y

    }

    println(returnFifteen())


    //_______________________________________________________________________________________________

    //函数作为返回值

    func makeIncrementer() -> (Int ->Int){     //定义返回值为函数类型的函数 makeIncrementer

       func addOne(number: Int) -> Int{

           return 1 + number

        }

        return addOne

    }

    var increment =makeIncrementer()

    println(increment(7))


    //_______________________________________________________________________________________________

    //函数做參数

    func hasAnyMatches(list: [Int], condition:Int ->Bool) -> Bool{    //设置參数为整型数组和函数类型的函数 hasAnyMatches

       for item in list{

           if condition(item){

               return true

            }

        }

        return false

    }

    func lessThanTen(number:Int) -> Bool{     //定义函数符合 hasAnyMatches的參数类型

       return number < 10

    }

    var numbers = [20,19, 7, 12]

    println(hasAnyMatches(numbers,lessThanTen))


    //_______________________________________________________________________________________________

    //闭包

    var numberArray = [3,45, 23, 523, 2]

    let number =numberArray.map({           //Swift 中的 Array中有一个 map 方法。其获取的一个闭包表达式作为其唯一參数,数组中的每个元素调用次该闭包函数。并返回该元素所映射的值,详细的映射方式和返回值类型由闭包来指定

        (number:Int) -> Int in

       let result = 3 * number

       return result

    })

    println(number)


    //***********************************************************************************************

    //5.Objects and Classes(对象和类)

    //_______________________________________________________________________________________________

    //类的创建

    class Shape{               //使用 class声明一个类,类中的属性声明和声明常量变量一样。方法和函数声明是同样的方式

       var numberOfSides = 0

       func simpleDescription() -> String{

            return"A shape with (numberOfSides) sides."

        }

    }


    //_______________________________________________________________________________________________

    //使用类

    var shape = Shape()     //实例化一个类。注意类名首字母大写

    shape.numberOfSides =7         //设置类的属性

    var shapeDescription =shape.simpleDescription()       //訪问类的方法

    println(shapeDescription)


    //_______________________________________________________________________________________________

    //使用 init 创建一个类的初始化器

    class NamedShape{

       var numberOfSides: Int = 0

       var name: String

        

       init(name: String){

            self.name = name       //self 用来区分属性和參数,在初始化这个类时,每一个初始值必须设置

        }

        

       func simpleDescription() -> String{

            return"(name) find A shape with(numberOfSides) sides."

        }

    }

    var name = NamedShape(name: "Listo")     //实例化而且初始化类 NameShape

    name.numberOfSides =7

    var nameDescription =name.simpleDescription()

    println(nameDescription)


    //_______________________________________________________________________________________________

    //继承和覆写

    class Square:NamedShape{

       var sideLength: Double

        

       init(sideLength: Double, name:String){

           self.sideLength = sideLength

           super.init(name: name)

            numberOfSides =4

        }

        

       func area() -> Double{

            returnsideLength * sideLength

        }

        

       override func simpleDescription() ->String {           //使用 override来覆写父类中的方法

            return"A square with sides of length (sideLength)"

        }

    }

    let test =Square(sideLength:  5.2, name: "my test square")

    println(test.area())

    println(test.simpleDescription())


    //_______________________________________________________________________________________________

    //除了简单的存储属性。属性能够有一个 getter setter

    class EquilateralTriangle:NamedShape{

       var sideLength: Double =0.0

        

       init(sideLength: Double, name:String){

           self.sideLength = sideLength

           super.init(name: name)

            numberOfSides =3

        }

        

       var perimeter: Double{

       get{

           return 3.0 *sideLength             //get 为获取这个属性的值

        }

       set{

           sideLength = newValue / 3.0         //newValue 代表 set给这个属性的新的值

        }

        }

        

       override func simpleDescription() ->String {

            return"An equilateral triangle with side of length (sideLength)"

        }

    }

    var triangle =EquilateralTriangle(sideLength: 3.1, name: "a triangle")

    println(triangle.perimeter)

    triangle.perimeter =9.9

    println(triangle.sideLength)


    //_______________________________________________________________________________________________

    //类中的方法和函数的差别

    class Counter{

       var count: Int =0

       func incrementBy(amount: Int, numberOfTimes times: Int){

           count += amount * times

        }

    }

    var counter =Counter()

    counter.incrementBy(2, numberOfTimes: 7)       //类中的方法须要在调用的时候写出參数的形參名(第一个參数名不能够写),函数在调用的时候除了外部參数存在的情况,否则不能參数的形參名


    //***********************************************************************************************

    //6.Enumeration and Structures(枚举和结构体)

    //_______________________________________________________________________________________________

    //枚举的创建

    enum Rank: Int{         //使用 enum 创建一个枚举,注意枚举名用大写

        case Ace =1        //指定第一个原始值为 1,后面的数据一次递增分配

       case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten

       case Jack, Queen, King

       func simpleDescription() -> String{

            switchself{       //这里的 self 就是一个枚举类型的值(enum value

           case .Ace:

               return "ace"

           case .Jack:

               return "jack"

           case .Queen:

               return "queen"

           case .King:

               return "king"

           default:

                returnString(self.toRaw())    //使用 toRaw fromRaw 来实现原始值和枚举值的转换

            }

        }

    }

    let ace =Rank.Ace

    println(ace.simpleDescription())

    let aceRawValue =ace.toRaw()

    println(aceRawValue)


    iflet convertedRank = Rank.fromRaw(3){

       let threeDescription = convertedRank.simpleDescription()

       println(threeDescription)

    }


    //_______________________________________________________________________________________________

    //枚举成员是实际的值,不是其原始值的第二种表达方式

    enum Suit{

       case Spades, Hearts, Diamonds, Clubs

       func simpleDescription() -> String{

           switch self{

           case .Spades:

               return "spades"

           case .Hearts:

               return "hearts"

           case .Diamonds:

               return "diamonds"

           case .Clubs:

               return "clubs"

            }

        }

    }

    let hearts =Suit.Hearts

    let heartDescription =hearts.simpleDescription()

    println(heartDescription)


    //_______________________________________________________________________________________________

    //结构体的创建(结构体和类之间最重要的一个差别是,结构体通过复制传递。类通过引用传递)

    struct Card{       //创建结构体,结构体名大写

       var rank: Rank

       var suit: Suit

       func simpleDescription() -> String{

            return"The (rank.simpleDescription()) of(suit.simpleDescription())"

        }

    }

    let threeOfSpades =Card(rank: .Three, suit: .Spades)

    let threeOfSpadesDescription =threeOfSpades.simpleDescription()

    println(threeOfSpadesDescription)


    //_______________________________________________________________________________________________

    //枚举的应用

    enum ServerResponse{

       case Result(String, String)

       case Error(String)

    }


    let success = ServerResponse.Result("6:00 am","8:09 pm")

    let failure = ServerResponse.Error("Out of cheese")


    var serverResonse:String

    switch success{

    caselet .Result(sunrise, sunset):

        serverResonse ="Sunrise is at (sunrise) and sunset is at(sunset)"

    caselet .Error(error):

       serverResonse = "Failure...(error)"

    }

    println(serverResonse)


    //***********************************************************************************************

    //7.Protocols and Extensions(协议和扩展)

    //_______________________________________________________________________________________________

    //协议的创建

    protocol ExamplePortocol{      //使用 protocol 创建协议,协议名要大写

       var simpleDescription: String { get}

       mutating func adjust()

    }


    //_______________________________________________________________________________________________

    //类,枚举,结构体都能够写协议

    class SimpleClass:ExamplePortocol{             //类遵守协议。必须实现协议中的方法

       var simpleDescription: String = "A very simple class."

       var anotherProperty: Int = 69105

       func adjust(){                              //在类中书写协议方法是不须要加上 mutating,由于一个类的方法能够改动类

            simpleDescription +=" Now 100% adjusted."

        }

    }

    var a = SimpleClass()

    a.adjust()

    let aDescription =a.simpleDescription

    println(aDescription)


    struct SimpleStructure:ExamplePortocol{        //结构体遵守协议。必须实现协议中的方法

       var simpleDescription: String = "A simple structure"

       mutating  func adjust() {                  //在结构体中书写协议方法时要记得加上 mutating

            simpleDescription +=" (adjusted)"

        }

    }

    var b = SimpleStructure()

    b.adjust()

    println(b.simpleDescription)


    //_______________________________________________________________________________________________

    //使用 extension将扩展功能加入到现有的类型中

    extensionInt: ExamplePortocol{            //为协议加入功能

       var simpleDescription: String{

        return"The number (self)"

        }

       mutating func adjust(){

           self += 42

        }

    }


    //_______________________________________________________________________________________________

    //使用协议作为数据类型

    let protocolValue:ExamplePortocol = a

    println(protocolValue.simpleDescription)


    //***********************************************************************************************

    //8.Generics(通用数据类型)

    //_______________________________________________________________________________________________

    //尖括号内写一个名字做一个通用的函数或类型

    func repeat<ItemType>(item:ItemType, times: Int) -> [ItemType] {      //做通用的类型

       var result = [ItemType]()

       for i in 0..<times{

            result += item

        }

       return result

    }

    println(repeat("Knock",4))


    //_______________________________________________________________________________________________

    //你能够通用形式的函数和方法,以及类、枚举、结构

    enum OptionalValue<T>{

       case None

       case some(T)

    }

    var possibleInteger:OptionalValue<Int> = .None

    possibleInteger = .some(100)

    println(possibleInteger)

  • 相关阅读:
    什么是TCP, UDP, HTTP, HTTPS协议?
    Django 自定义分页器
    PHP7.3安装event扩展
    深入浅出 PHP SPL(PHP 标准库)(转)
    Centos7安装redis5.0.7
    useradd命令详解(转)
    centos7.5下安装rabbitmq服务端以及php扩展
    php-fpm启动,重启,退出
    深度好文:PHP写时拷贝与垃圾回收机制(转)
    非对称加密openssl协议在php7实践
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5032494.html
Copyright © 2011-2022 走看看