IOS学习笔记05_1-Swift-如何定义类和类的构造方法、重载方法

二〇一五年八月十二日 10:36:11  今天学习一下 Swift的函数


1,函数的写法,和构造方法

 

import Foundation

class helloword{
    
    var mingzi:String? = "zhanglaosan"//还记得这个不? 可选参数   
    
    init(name:String){//初始化方法(构造方法)
        mingzi = name;
        
    }
    init(){//重载构造方法
        
    }
    func sayhello(){
        
        println("welcome,\(mingzi!)")
        
    }
    
}

//创建类实例,<span style="font-family: Arial, Helvetica, sans-serif;">如果这里传值就用带参数的构造方法init(name:String),</span><span style="font-family: Arial, Helvetica, sans-serif;">//如果没有传值就用无参数构造方法init()</span>
var h = helloword(name:"lisi")
 
h.sayhello()

init 是初始化函数   一共定义了两个构造方法   一个是有参数的,一个是无参数的

当执行  h.sayhello()的时候会先判断 h是带参数的还是不带参数的,如果

var h = helloword()   

那么就会输出 welcome,zhanglaosan,如果是带参数的

var h = helloword(name:"lisi")
那么就会输出 welcome,lisi

这里要说一下,其实这个说法我也不太确定,刚才搜了一下 init 只是初始化方法,为什么叫构造方法,和重载,这两个定义我还是没理解透!希望有大牛知道能教授一下我

初始化

构造

重载

多态等等   面向对象的这几个形式我还是没理解透………………   只是大概知道意思但是不知道怎么解释。。。。。。。求教

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2,类方法(静态方法)

 

import Foundation


class helloword{
    
    class func sayhi(){//静态方法,不用像1例子里要创建实例就可以直接通过类调用
        println("hello wangwu")
    }
}

helloword.sayhi()
输出结果: hello wangwu

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

3,类的继承 

//
//  main.swift
//  classfunc
//
//  Created by kilon-apple on 15/8/11.
//  Copyright (c) 2015年 kilon-apple. All rights reserved.
//

import Foundation

class helloword{
    
    var mingzi:String? = "zhanglaosan"
    
    init(name:String){//初始化方法(构造方法)
        mingzi = name;
        
    }
    init(){//重载构造方法
        
    }
    func sayhello(){
        
        println("welcome,\(mingzi!)")
        
    }
    
    class func sayhi(){
        println("hello wangwu")
    }
}

class Hi:helloword{//定义Hi类,继承自helloword  
    
}
 
var hi = Hi()
hi.sayhello()//调用
Hi.sayhi()//调用
猜猜输出结果是什么:?███████████

我猜是:welcome,zhanglaosan

                hello wangwu


输出结果:welcome,zhanglaosan
hello wangwu

---------------------------------------------------------------------

3_1,继承序章:重写

 

import Foundation

class helloword{
    
    var mingzi:String? = "zhanglaosan"
    
    init(name:String){//初始化方法(构造方法)
        mingzi = name;
        
    }
    init(){//重载构造方法
        
    }
    func sayhello(){
        
        println("welcome,\(mingzi!)")
        
    }
    
    class func sayhi(){
        println("hello wangwu")
    }
}

class Hi:helloword{
    
    override func sayhello() {//重写要加关键字 override ,在Xcolde里直接在继承的方法里打 sayhello 就会显示提示直接敲回车就出来了很方便。
        println("computer say 'Hi,\(mingzi!)!'")
    }
    
}

var hi = Hi(name:"kilon")//带参构造方法
hi.sayhello()
Hi.sayhi()
输出结果 :computer say 'Hi,kilon!'

                  hello wangwu

---------------------------------------------------------------------

3_2,继承序章:执行父类的方法(执行静态方法)

 

//
//  main.swift
//  classfunc
//
//  Created by kilon-apple on 15/8/11.
//  Copyright (c) 2015年 kilon-apple. All rights reserved.
//

import Foundation

class helloword{
    
    var mingzi:String? = "zhanglaosan"
    
    init(name:String){//初始化方法(构造方法)
        mingzi = name;
        
    }
    init(){//重载构造方法
        
    }
    func sayhello(){
        
        println("welcome,\(mingzi!)")
        
    }
    
    class func sayhi(){
        println("hello 斤斤计较斤斤计较")
    }
}

class Hi:helloword{
    
    override func sayhello() {
        super.sayhello()//使用父类方法
        println("computer say 'Hi,\(mingzi!)!'")
    }
//    override init(name: String) {//当然还可以这样重写构造方法 但是下边的 \(mingzi!)会报错。不晓得为啥。。。。为啥上边的mingzi可以用,这个就不能用了内?
//         println("computer say 'Hi,\(mingzi!)!'")
//    }
    
}
var hi = Hi(name:"kilon")
hi.sayhello()

Hi.sayhi()
输出结果:

welcome,kilon
computer say 'Hi,kilon!'
hello 斤斤计较斤斤计较

</pre>这里有个一问点:  我使用父类的静态方法是在<pre name="code" class="objc">println("computer say 'Hi,\(mingzi!)!'")
之前,为什么执行结果确实在 他之后显示……     这个有大牛知道么?求解。。。。



------------------------------------------------------------------------------------------------------------------------------------------------------------------------

4,Swift语言类的动态扩展功能


应用场景:比如说我们在使用第三方框架,或者是在使用系统中的某一个类,我们发先这样的类的功能并不能满足我的们的要求,那么这时候就需要我们自己手动的扩展这个类的功能

这种扩展可以在不改变类的继承结构的情况下实现我们的要求。


 

import Foundation

class helloword{
    
    var mingzi:String? = "zhanglaosan"
    
    init(name:String){//初始化方法(构造方法)
        mingzi = name;
        
    }
    init(){//重载构造方法
        
    }
    func sayhello(){
        
        println("welcome,\(mingzi!)")
        
    }
    
    class func sayhi(){
        println("hello 斤斤计较斤斤计较")
    }
}

class Hi:helloword{
    
    override func sayhello() {
        super.sayhello()//使用父类方法
        println("computer say 'Hi,\(mingzi!)!'")
    }
    
}

extension Hi{//动态扩展类     关键字   extension  强调: 这里只要扩展了Hi的类,那么Hi的子类里都会有这个扩展的类   如 4_1 实例所示

    func sayhaha(){
    
    println("wa ha ha ha ha !")
    }
    
}

//var h = helloword(name:"lisi")//如果这里传值就用带参数的构造方法init(name:String),如果没有传值就用无参数构造方法init()
//h.sayhello()
//
//helloword.sayhi()


var hi = Hi(name:"kilon")
hi.sayhello()

Hi.sayhi()
hi.sayhaha()
输出结果:

welcome,kilon
computer say 'Hi,kilon!'
hello 斤斤计较斤斤计较
wa ha ha ha ha !

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

4_1 扩展后的子类实例

<pre name="code" class="objc">import Foundation

class helloword{
    
}

class Hi:helloword{
    
    
}


class Hison:Hi{
}

extension Hi{
    
    func sayhaha(){
        
        println("wa ha ha ha ha !")
    }
    
}
var hh = Hison()
hh.sayhaha()

 输出结果:  

wa ha ha ha ha !

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

5,Swift 使用接口(Protocol)   * 在Swift里接口叫 Protocol (协议的意思)  不是interface

 

import Foundation


protocol person {//定义接口  关键字 Protocol 


    func getName()->String//定义方法 getName 返回值类型为String
}


class ren:person{//实现接口  方法类似于类与类之间的继承   


    func getName() -> String {//这里在Xcolde 里敲get回车,就能直接补全了   这里要实现这个接口的方法否则会报错
        return "zhangsan"
    }
    
}


var r = ren()  
println("name is \(r.getName())")//执行接口里的方法
输出结果:

name is zhangsan


------------------------------------------------------------------------------------------------------------------------------------------------------------------------

还有一文命名空间我想放在单独的文章里做记录!!二〇一五年八月十二日 13:55:53



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值