/*************************函数和闭包**********************/
//使用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()