IOS學習筆記05_1-Swift-如何定義類和類的構造方法、過載方法
二〇一五年八月十二日 10:36:11 今天學習一下 Swift的函式
1,函式的寫法,和構造方法
var h = helloword(name:"lisi")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>
h.sayhello()
init 是初始化函式 一共定義了兩個構造方法 一個是有引數的,一個是無引數的
當執行 h.sayhello()的時候會先判斷 h是帶引數的還是不帶引數的,如果
var h = helloword()
那麼就會輸出 welcome,zhanglaosan,如果是帶引數的
var h = helloword(name:"lisi")
那麼就會輸出 welcome,lisi
這裡要說一下,其實這個說法我也不太確定,剛才搜了一下 init 只是初始化方法,為什麼叫構造方法,和過載,這兩個定義我還是沒理解透!希望有大牛知道能教授一下我
初始化
構造
過載
多型等等 面向物件的這幾個形式我還是沒理解透……………… 只是大概知道意思但是不知道怎麼解釋。。。。。。。求教
------------------------------------------------------------------------------------------------------------------------------------------------------------------------2,類方法(靜態方法)
輸出結果: hello wangwu ------------------------------------------------------------------------------------------------------------------------------------------------------------------------import Foundation class helloword{ class func sayhi(){//靜態方法,不用像1例子裡要建立例項就可以直接通過類呼叫 println("hello wangwu") } } helloword.sayhi()
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