swift基础学习(04)[闭包、函数、枚举、类和结构体]

//闭包表达式:闭包表达式是一种利用简洁语法构建内联闭包的方式

//sort方法:排序功能,排序后的原来的不会被修改

//:从大到小排序

let names = ["d","ds","wa","ad"]

func sortNames(sName1:String,sName2:String) -> Bool {

    return sName1 > sName2

}

var result = names.sort(sortNames)

print(result)

//sort方法接受一个闭包该闭包函数需要传入与数组元素类型相同的两个值,并返回一个布尔类型值来表明 当排序结束后传入的第一个参数排在第二个参数前面还是后面。如果第一个参数值出现在第二个参数值前面, 序闭包函数需要返回 true ,反之返回 false 

//闭包表达式语法

    /*

{ (parameters) -> returnType in

    statements

}

*/

result = names.sort({(sNmae1:String,sName2:String) -> Bool in

return sName2 > sNmae1

})

//也可以根据上下文进行自己判断

//尾随闭包如果您需要将一个很长的闭包表达式作为最后一个参数传递给函数,可以使用尾随闭包来增强函数的可读性。尾随闭包是一个书写在函数括号之后的闭包表达式,函数支持将其作为最后一个参数调用

func someFunctionThatTakesAClosure (closure: () -> Void) {

//函数


}

//不使用尾随闭包

someFunctionThatTakesAClosure({

//闭包主题部分

})

//使用尾随闭包

someFunctionThatTakesAClosure(){



}

// map(_:) 方法中使用尾随闭包将 Int 类型数组 [16, 58, 510] 转换为包含对应 String 类型的值 的数组 ["OneSix", "FiveEight", "FiveOneZero"] 

let digitNames = [0:"zero",1:"one",2:"two",3:"three",4:"four"]

let numbers = [16,58,510]

//let  strings = numbers.map({

(var number) -> String in

    var output = ""

    while number > 0 {

    output = digitNames[number % 10]! + output

    number /= 10

    }

return output

})

//捕获值闭包可以在其被定义的上下文中捕获常量或变量。即使定义这些常量和变量的原作用域已经不存在,闭包仍然可以在闭包函数体内引用和修改这些值。

//非逃逸闭包

//自动闭包

var stringNumber = [1,2,3,4,5,6,7,8,9]

//print(stringNumber.count)

//自动闭包延迟,也就是如果闭包不被调用那么闭包里的函数永远不被调用

let provider = {

stringNumber.removeAtIndex(2)

}

//print(stringNumber.count)

执行该方法体

//print(provider())

//print(stringNumber.count)

//将闭包作为一个参数传递给函数时同样会有这样的效果

func serverNumber (provider: () -> Int){


print(provider())

    

}

serverNumber({

    

stringNumber.removeAtIndex(0)

    

})

print(stringNumber)


//枚举如果给枚举成员提供一个值(称为原始),则该值的类型可以是 字符串,字符,或是一个整型值或浮点数

//枚举语法

enum someEnumeration {

//枚举定义

}

//枚举

enum somePoint {

    case North

    case South

    case East

    case West

}

//或者

enum Planet {

    

case Vegetable, Apple, Oriangle


}


//调用枚举值

var direction = somePoint.North

print(direction)


//使用swift匹配单个枚举值

switch direction {

    

case .North:

    print("north")

case .West:

    print("west")

case .East:

    print("east")

case .South:

    print("south")

    

}

//关联值

enum Barcode {

    

    case UPCA(Int,Int,Int)

    case QRCode(String)


}

var codeData = Barcode.UPCA(0, 1, 2)

codeData = .QRCode("hello everybody")

print(codeData)

//原始值原始值可以是字符串,字符,或者任意整型值或浮点型值。每个原始值在枚举声明中必须是唯一的

enum ASCIIControlCharacter:Character {

    

    case Tab = "\t"

    case LineFeed = "\n"

    case CarriageReturn = "\r"


}

//构造器

//递归枚举

enum ArithmeticExpression {

    

case Number(Int)

indirect case Addition(ArithmeticExpression,ArithmeticExpression)

indirect case Mutiplication(ArithmeticExpression,ArithmeticExpression)


}


func evaluate(expression:ArithmeticExpression) -> Int {

    switch expression {

    case .Number(let value):

        return value

    case .Addition(let Left, let right):

        return evaluate(Left) + evaluate(right)

    case .Mutiplication(let left, let right):

        return evaluate(left) * evaluate(right)

    }

}

let five = ArithmeticExpression.Number(5)

let four = ArithmeticExpression.Number(4)

let sum = ArithmeticExpression.Addition(five, four)

let product = ArithmeticExpression.Mutiplication(sum, ArithmeticExpression.Number(2))

print(evaluate(product))


//类和结构体

func Resolution() {

print("hello everyBody")

}

//http://www.jianshu.com/p/70f807081420

//语法

struct someTwo {

    //定义结构体

    var width = 0

    var height = 0

}


class someOne {

//定义类

    var sometwo = someTwo()

    var interlaced = false

    var frameRate = 0.0

    var name: String?

    

}

//类和结构体实例

//生成结构体和实例

let someTT = someTwo()

let  someSS = someOne()

//属性的访问使用.语法

someSS.sometwo.width = 100

print(someSS.sometwo.width)

//结构体类型的成员逐一构造器

let vga = someTwo(width: 520,height: 480)

print(vga.height,vga.width)


//结构体和枚举是值的类型


//类是引用类型


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值