swift 基础(二)闭包、对象和类、setter&getter

//闭包
//闭包的函数体部分由关键字 in 引入。 该关键字表示闭包的参数和返回值类型定义已经完成,闭包函数体即将开始
var numbers = [1,2,3,4]
numbers.map({
    number -> Int in
    let result = 3*number
    return result
})

//如果一个闭包的类型已知(map的类型为 Int->Int)可以省略参数类型和返回值
let mapNumbers = numbers.map({number in 3*number})
mapNumbers



//奇数返回0
numbers.map {
    number -> Int in
    var  count = 0
    let  result = number%2
    if result == 0{
        count += 1
    }
    return count
}

//Swift 自动为内联函数提供了参数名称简写功能,可以直接通过 $0,$1,$2等名字来引用的闭包的参数的值。
//关于闭包的更加详细的讲解:http://c.biancheng.net/cpp/html/2285.html
let compareString = ["hfahkj","abc","qwer","bca","cab"]
compareString.sort()

/**
 *  对象和类
 */
//创建一个类,在类中声明函数和属性
class Shape{
    var numberOfSides = 0
    func description() -> String{
        return "A shape with \(numberOfSides) sides"
    }
}
//创建类的实例,并使用点语法访问属性,调用方法
var shape = Shape()
shape.numberOfSides = 8
shape.description()

//使用自定义的init创建一个构造器,如果需要在删除对象前进行清理工作,使用deinit创建一个析构函数
class NamedShape{
    var numberOfSides = 0
    var name = ""
    init(name:String,sides:Int){
        self.name = name
        self.numberOfSides = sides
    }
    func description() -> String{
        return "\(name) has \(numberOfSides) sides"
    }
}
//初始化circle的时候可以不调用init方法,系统会自动调用,当然要加上也是可以的
var namedShape1 = NamedShape.init(name: "rectangle", sides: 4)
var namedShape = NamedShape(name: "rectangle", sides: 4)
namedShape.description()

//继承语法,使用冒号分割:  subclass:parentclass。需要重写父类方法时,添加override标记。
class Circle:NamedShape{
    var radius:Double
    init(radius:Double,name:String){
        self.radius = radius
        //访问父类内部变量和方法的时候需要先调用父类的init方法
        super.init(name: name, sides: 0)
        //调用super.init方法后可以对父类的属性进行修改
        numberOfSides = 8
        super.description()
    }
    
    //getter和setter方法
    //swift中的getter/setter 有别于oc中的getter/setter. 在swift 中使用getter/setter 主要是用来间接获取/改变其他属性的值。在swift中这类属性被称之为“计算属性”
    var perimeter:Double{
    set{//调用circle.permeter = 4会改变radius的值,newValue为赋值后的permeter值,此时相当于radius = 4 + 1
        radius = newValue+1
    }
    get{//circle.perimeter的结果为2,和oc的getter较相似
        return radius*2
    }
    }
    
    func area() -> Double{
        return radius*radius*M_PI
    }
    //重写父类方法
    override func description() -> String {
        return "\(name) has \(numberOfSides) sides,its area is \(area())"
    }
}
var circle = Circle(radius: 1, name: "hahCircle")
circle.description()
//调用setter和getter方法,间接改变radius的值
circle.perimeter
circle.perimeter = 4
circle.radius

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值