您的位置:首页 > 移动开发 > Swift

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

2016-05-08 09:50 609 查看
//闭包表达式:闭包表达式是一种利用简洁语法构建内联闭包的方式

//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)

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

//类是引用类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息