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

Swift 学习之函数和闭包与对象和类—002

2014-10-13 15:21 323 查看
/*************************函数和闭包**********************/

//使用func来声明一个函数,使用名字和参数来调用函数。使用->来指定函数返回值
func test(name:
String,age: Int) ->
String{
   
return "I am
\(name),I am \(age)"
}

test("pengzhihao",
25)

func greet(name:
String,day: String) ->
String{
   
return "Hello
\(name),today is \(day)"
}

greet("pengzhihao",
"Monday")

//无参函数
func getGasPreces() -> (Double,Double,Double){

 return(3.59,
3.69, 3.79)
}

getGasPreces()

//函数的参数数量是可变的,用一个数组来获取它们
func sumOf(numbers:
Int...) -> Int{
   
var sum = 0
   
for number in numbers{
    sum += number
}
   
return sum
}

sumOf()

sumOf(42,28)

//函数可以嵌套,被嵌套的函数可以访问外侧函数的变量
func returnFifteen() ->
Int{
var y =
10
   
func add(){
      y +=
5
    }
   
add()
   
return y
}

returnFifteen()

//函数可以作为另一个函数的返回值
func makeIncrementer() -> (Int ){
   
func addOne(number:
Int) -> Int{
      
return 1 + number
    }

return addOne(15)
}

makeIncrementer()

//函数可以当做参数传入另一个函数
func lessThanTen(number:
Int) -> Bool{
 
return number<10
}

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

func hasAnyMatches(list: [Int],condition:
Int -> Bool) ->
Bool{
   
for item in list{
       
if condition(item){

        return
true
    }
  }

    return
false
}

hasAnyMatches(numbers,
lessThanTen)

/*************************对象和类**********************/

//使用class和类名来创建一个类,类中的属性声明和方法声明分别与变量声明和函数声明一样
class Shape{
   
var numbersOfSizes =
0
   
let color = "red"

    
   
func simpleDescreption() ->
String{

    return
"A shape with \(numbersOfSizes) sides"
    }

    
   
func getColor(color:
NSString) -> String{
   
return "color is
\(color)"
    }
}

var shape =
Shape()

//不能再给 shape
的 color 赋值,因为该属性为常量

//cannot assign to 'color' in 'shape'

//shape.color = "gree"

shape.numbersOfSizes =
7

let color =
shape.getColor("gree")

var sides =
shape.simpleDescreption()

shape

//添加构造函数来初始化类实例,使用 init
来创建一个构造器
class NameShape {
   
var numberOfSides:
Int = 0
   
var name: String

    
  
init(name: String) {
     
self.name = name
    }

    
   
func simpleDescreption() ->
String{

        return
"A shape with \(numberOfSides) sides"
    }
}

var nameShape =
NameShape(name: "pengzhihao")

//创建一个 NameShape
的子类
class Square:
NameShape {
   
var sideLength: Double

 
   
init(sideLength: Double,name:
String) {
   
self.sideLength=sideLength
   
super.init(name: name)//调用父类的 init
方法

    numberOfSides =
4
  }

    //如果父类中没有该方法,如果子类添加 override
也会报错
   
func area() -> Double {

     return
sideLength * sideLength
    }

    //如果重写父类的方法,需要在 func
前添加 override
    
override func simpleDescreption() ->
String{

        return
"A shape with sides of length \(sideLength)"
    }

}

let test =
Square(sideLength:
5, name: "my test square")
test .area()

test.simpleDescreption()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  swift 闭包