二〇一五年八月十二日 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