Swiftオブジェクト向け詳細

6342 ワード

1まず、Swiftでクラスとクラスの属性、コンストラクション関数、メソッド、クラスメソッドを定義する方法を見てみましょう.
import Foundation

class Hello{
    // 
    var _name:NSString?="jikexueyuan"
    // 
    init(){      
    }
    // 
    init(name:NSString){
        _name = name
    }
    // 
    func sayHello(){
        println("Hello \(_name)")
    }
    // 
    class func sayHi(){
        println("Hello Swift")
    }
}
var hello = Hello(name: "chen")
hello.sayHello()
Hello.sayHi()

 
2,Swiftでの継承はC#と同様にコロンで表される.クラスが親を継承すると、親のプロパティとメソッドが同時に存在します.子クラスで親のメソッドを書き換えるか、親のメソッドを呼び出すことができます.
class Hi:Hello {
    // 
    override func sayHello() {
        super.sayHello()// 
        println("Hi \(_name)")
    }
}
var hi = Hi()
hi.sayHello()

 
3,プログラム作成中に第三者クラスライブラリやシステムクラスライブラリを使用する場合があり,これらのクラスライブラリの中には拡張が必要なクラスがあればextensionキーワードを用いて実現できることが分かった.子クラスがextension拡張子を持つ親クラスを継承する場合、対応する子クラスにも拡張方法があるはずです.
// 
extension Hi{
    func sayHaha(){
        println("Haha")
    }
}
hi.sayHaha()

 
4,Swiftではprotocolキーワードを用いてインタフェースを定義する
protocol Person{
    func getName()->NSString
}

class Man: Person {
    func getName() -> NSString {
        return "jikexueyuan"
    }
}
var man = Man()
var hiMan = Hi(name: man.getName())
hiMan.sayHello()

 
5,マルチステートの継承特性により,符号化にはサブクラスと親クラスの転換,すなわち上向き転換と下向き転換があった.アップシフトは、サブクラスのインスタンスを親クラスに直接割り当てる参照変数であり、タイプ変換は不要です.参照変数は、コンパイル時にのみ実際のタイプに変換され、この強制変換は下へ変換されます.
// 
let obj : NSObject = "Hello"
println(obj)
// 
let objStr : NSString = obj as! NSString println(objStr)

 
6,Swiftではネーミングスペースはクラスのネストを用いて実現されるが,ネーミングスペースのネストが複雑でネーミングスペースのクラスが非常に多い場合には肥大化する.このときは1つのSwiftファイルでネーミングスペースのネストを定義し、もう1つのSwiftファイルでextensionキーワードを使ってネーミングスペースを拡張し、最後に使用したファイルで直接呼び出すことができます.
//---Space.swift
class com{
    class jikexueyuan{
    
    }
}
//---Hello.swift
extension com.jikexueyuan{
    class Hello {
        func sayHello(){
            println("Hello")
        }
    }
}
//---Hi.swift
extension com.jikexueyuan{
    class Hi  {
        func sayHi(){
            println("Hi")
        }
    }
}
//---Main.swift
var spaceHello = com.jikexueyuan.Hello()
spaceHello.sayHello()
var spaceHi = com.jikexueyuan.Hi()
spaceHi.sayHi()