Swift学习笔记 -面向对象(2)

前端之家收集整理的这篇文章主要介绍了Swift学习笔记 -面向对象(2)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
//定义计算属性
/** [修饰符] var 计算属性名 : 属性类型 { get{ //getter方法执行体,该方法必须有返回值 } set(形参名) { //setter方法执行体,该方法一定不能有返回值 } } 1,修饰符可省略 2.var: 只能定义成变量,因此只能使用var */@H_502_3@
 //使用枚举定义一个计算属性@H_502_3@
enum Season
{
    case@H_502_3@ Spring,Summer,Fall,Winter
    //setter,getter方法@H_502_3@
    var info:String {
        //get@H_502_3@
        get@H_502_3@ {
            println("正在执行getter方法"@H_502_3@)
            switch@H_502_3@ (self)
            {
            case@H_502_3@ .Spring:
                @H_502_20@return@H_502_3@ "春暖花开"@H_502_3@
            default :
                @H_502_20@return@H_502_3@ "也就那回事吧~"@H_502_3@
            }
        }
        //set@H_502_3@
        set@H_502_3@ (newValue){
            println("正在执行setter方法,传入参数为:\(newValue)"@H_502_3@)
        }

    }
}
var s = Season.Spring //正在执行getter方法@H_502_3@ //春暖花开@H_502_3@
println(s.info) //正在执行setter方法,传入参数为:秋高气爽@H_502_3@
s.info = "秋高气爽"@H_502_3@
 //下一个例子@H_502_3@
class User
{
    var first@H_502_3@ : String = ""@H_502_3@
    var last@H_502_3@ :String = ""@H_502_3@
    //定义计算属性@H_502_3@
    var fullName : String
        {
        //定义计算属性的getter方法,该方法的返回值由first ,last两个存储属性决定@H_502_3@
        get@H_502_3@ {
            @H_502_20@return@H_502_3@ first@H_502_3@ + "-"@H_502_3@ + last@H_502_3@
        }
        //set,负责改变该实例的first,last 两个存储属性@H_502_3@ // set(newValue){@H_502_3@ // //componentsSeparatedByString("-")通过“-”将字符串分割成数组@H_502_3@ // var name = newValue.componentsSeparatedByString("-")@H_502_3@ // self.first = name[0]@H_502_3@ // self.last = name[1]@H_502_3@ // }@H_502_3@
        //简化set方法,省略se的形参@H_502_3@
        set@H_502_3@{
            var name  = newValue.componentsSeparatedByString("-"@H_502_3@)
            self.first@H_502_3@ = name[0@H_502_3@]
            self.last@H_502_3@ = name[1@H_502_3@]
        }


    }

    init (first@H_502_3@ : String,last@H_502_3@ :String)
    {
        self.first@H_502_3@ = first@H_502_3@
        self.last@H_502_3@ = last@H_502_3@
    }
}

let m = User(first@H_502_3@: "jiang"@H_502_3@,last@H_502_3@: "jun"@H_502_3@)
println(m.fullName)//jiang-jun@H_502_3@
m.fullName = "宇宇-芾"@H_502_3@
println(m.first@H_502_3@)//宇宇@H_502_3@ //芾@H_502_3@
println(m.last@H_502_3@)
 //只读属性,省略get关键字,只读属性,不能被赋值,@H_502_3@
class User1 {
    var first@H_502_3@ : String = ""@H_502_3@
    var last@H_502_3@ : String = ""@H_502_3@
    //定义只读属性,只有get方法@H_502_3@
    var fullName : String {
        @H_502_20@return@H_502_3@ first@H_502_3@ + "-"@H_502_3@ + last@H_502_3@
    }
    init (first@H_502_3@ : String,last@H_502_3@ : String)
    {
        self.first@H_502_3@ = first@H_502_3@
        self.last@H_502_3@ = last@H_502_3@
    }
}

let q = User(first@H_502_3@:"Jiang"@H_502_3@,last@H_502_3@: "Jun"@H_502_3@)
println(q.fullName)//Jiang-Jun@H_502_3@
 //属性观察者@H_502_3@ //willSet(newValue):被观察的属性即将被赋值之前自动调用方法@H_502_3@ //didSet(oldValue):被观察的属性被赋值完成之后自动调用方法@H_502_3@
/* 属性观察者,可以监听如下属性变化 1.除了延迟存储属性之外的所有存储属性 2.可通过重载方式为继承得到的属性添加属性观察者 */@H_502_3@
/* 语法: [修饰符] var 存储属性名 :属性类型 [= 初始值] { willSet(newValue) { //属性被赋值之前自动执行的代码 } didSet(oldValue) { //属性被赋值完成之后自动执行的代码 } } */@H_502_3@

class Person1 {
    //定义存储属性@H_502_3@
    var name : String = ""@H_502_3@ {
        willSet{
            //用户名必须在2~6位之间@H_502_3@
            if@H_502_3@ (count(newValue)>6@H_502_3@) || (count(newValue) < 2@H_502_3@)
            {
                println("您设置的人名\(newValue)不符合要求,请重新设置 "@H_502_3@)
            }
            else@H_502_3@
            {
                println("符合要求"@H_502_3@)
            }
        }
        didSet {
            println("人名设置完成,被修改的原名为:\(oldValue)"@H_502_3@)
        }
    }

    var age : Int = 0@H_502_3@ {
        willSet {
            if@H_502_3@ newValue > 100@H_502_3@ || newValue < 0@H_502_3@
            {
                println("你的设置的年龄\(newValue)不符合要求,请重新设置!"@H_502_3@)
            }else@H_502_3@{
                println("设置成功"@H_502_3@)
            }
        }
        didSet{
            println("年龄为:\(oldValue)"@H_502_3@)
        }
    }

}

var w = Person1()
w.age = 1000@H_502_3@
w.age = 30@H_502_3@
/* 你的设置的年龄1000不符合要求,请重新设置! 年龄为:0 设置成功 年龄为:1000 30 */@H_502_3@
println(w.age)

w.name = "jiangjun"@H_502_3@
/* 您设置的人名jiangjun不符合要求,请重新设置 人名设置完成,被修改的原名为: jiangjun */@H_502_3@
println(w.name)

w.name = "宇宇芾"@H_502_3@
 //符合要求 人名设置完成,被修改的原名为:jiangjun 宇宇芾@H_502_3@
println(w.name)
//将方法转成函数@H_502_3@
class SomeClass
{
    func test()
    {
        println("执行test方法"@H_502_3@)
    }
    class func bar(#msg@H_502_3@ : String@H_502_3@) {
    println("bar 类型方法,传人参数\(msg)"@H_502_3@)
    }
}
var@H_502_3@ sc =@H_502_3@ SomeClass()
//将sc的test方法分离成函数@H_502_3@
var@H_502_3@ f1 : () ->@H_502_3@() =@H_502_3@ sc.@H_502_3@test
//将bar的类型方法分离成函数@H_502_3@
var@H_502_3@ f2 :(String@H_502_3@) ->@H_502_3@() =@H_502_3@ SomeClass.@H_502_3@bar
//以下代码等同@H_502_3@
sc.@H_502_3@test()
f1()
//以下代码等同@H_502_3@
SomeClass.@H_502_3@bar(msg: "测试信息"@H_502_3@)
f2("测试信息"@H_502_3@)

//方法的外部形参名,Swift会隐式添加@H_502_3@

enum Gender
{
    case@H_502_3@ Male,Female
    //定义一个方法,并为给形参指定外部形参名@H_502_3@
    func info(msg:String@H_502_3@,count: Int,name: String@H_502_3@)
    {
        for index in@H_502_3@ 1.@H_502_3@..@H_502_3@count
        {
            println("\(msg)"@H_502_3@)
        }
    }
}

Gender.@H_502_3@Male.@H_502_3@info("text"@H_502_3@,count: 5@H_502_3@,name: "JiangJun"@H_502_3@)

//值类型的可变方法@H_502_3@
struct FkRect
{
    var@H_502_3@ x : Int
    var@H_502_3@ y : Int
    var@H_502_3@ width:Int
    var@H_502_3@ height: Int
    mutating func moveByX(x : Int,y : Int)
    {
        self@H_502_3@.@H_502_3@x +=@H_502_3@ x
        self@H_502_3@.@H_502_3@y +=@H_502_3@ y
    }
}
//创建FkRect实例@H_502_3@
var@H_502_3@ rect =@H_502_3@ FkRect(x: 20@H_502_3@,y: 23@H_502_3@,width: 200@H_502_3@,height: 200@H_502_3@)
rect.@H_502_3@moveByX(100@H_502_3@,y: 80@H_502_3@)
println("\(rect.x),\(rect.y)"@H_502_3@)//120,103@H_502_3@
//可选链@H_502_3@
//使用可选链代替强制解析@H_502_3@
class@H_502_3@ Customer
{
    var@H_502_3@ name = ""@H_502_3@
    var@H_502_3@ emp :Employee?
    init (name: String@H_502_3@)
    {
        self.name = name
    }

    //使用可选链调用方法@H_502_3@
    let@H_502_3@ employees = [
        Employee(name: "静静"@H_502_3@,title: "客服"@H_502_3@),Employee(name: "文文"@H_502_3@,title: "售后"@H_502_3@)
    ]
    //该方法可根据员工名返回对应的员工,返回值为可选类型@H_502_3@
    func findEmp (empName:String@H_502_3@) ->Employee!
    {
        for@H_502_3@ emp in@H_502_3@ employees
        {
            if@H_502_3@ emp.name == empName{
                return@H_502_3@ emp
            }
        }
        return@H_502_3@ nil
    }
}

class@H_502_3@ Employee {
    var@H_502_3@ name = "Jiang"@H_502_3@
    var@H_502_3@ title = "Jun"@H_502_3@
    var@H_502_3@ company : Company!
    init (name:String@H_502_3@,title:String@H_502_3@)
    {
        self.name = name
        self.title = title
    }
}

class@H_502_3@ Company {
    var@H_502_3@ name = "上海"@H_502_3@
    var@H_502_3@ addr = "嘉定"@H_502_3@
    init(name:String@H_502_3@,addr:String@H_502_3@)
    {
        self.name = name
        self.addr = addr
    }
}
//如果Customer访问对应的公司的名称@H_502_3@
var@H_502_3@ c = Customer(name: "宇宇"@H_502_3@)
var@H_502_3@ emp = Employee(name: "静静"@H_502_3@,title: "客服"@H_502_3@)
//设置Customer关联的Employee实例@H_502_3@
c.emp = emp
//设置Employee关联Company@H_502_3@
emp.company = Company(name: "新创公司"@H_502_3@,addr: "嘉定区,马路"@H_502_3@)
println("\(c.name),\(c.emp!.company.name)"@H_502_3@)//宇宇,新创公司@H_502_3@

//使用可选链@H_502_3@
var@H_502_3@ c2 = Customer(name: "宇宇"@H_502_3@)
c2.emp = Employee(name: "静静"@H_502_3@,title: "客服"@H_502_3@)
//可选访问属性@H_502_3@
println("\(c2.name),\(c2.emp?.company?.name)"@H_502_3@)//宇宇,nil@H_502_3@
//printlnprintln("\(c2.name),\(c2.emp!.company.name)")//报错@H_502_3@


var@H_502_3@ c3 = Customer(name: "jiangjun"@H_502_3@)
println("\(c3.name),\(c3.emp?.company?.name)"@H_502_3@)//jiangjun,nil@H_502_3@
//println("\(c3.name),\(c3.emp!.company.name)")//报错@H_502_3@

enum Season
{
    static var@H_502_3@ desc : String@H_502_3@?
    static let@H_502_3@ name = "季节"@H_502_3@
    static var@H_502_3@ info : String@H_502_3@ {
        get {
            return@H_502_3@ "代表季节的枚举,其desc为:\(desc)"@H_502_3@
        }
        set {
            println("程序尝试对info计算属性赋值:\(newValue)"@H_502_3@)
        }
    }
}
Season.desc = "季节类"@H_502_3@
println(Season.name)//季节@H_502_3@
Season.info = "新的info"@H_502_3@
println(Season.info)//代表季节的枚举,其desc为:Optional("季节类")@H_502_3@

本文部分内容来自《Swift疯狂讲义》

猜你在找的Swift相关文章