Swift和Dart (二)

這篇文章 主要是比較兩種語言的初始化

swift 中的初始化

Swift 的初始化和 Objective-C 有一個很大的不同,Objective-C 默認會給每個屬性賦一個空值,如 nil 或者 0排宰,但 Swift 的初始化更加嚴格挽唉,需要開發(fā)者自己顯示指定類成員的初始值捞慌,否則編譯會報錯

1.結(jié)構(gòu)體初始化

如果結(jié)構(gòu)體沒有實現(xiàn)任何初始化函數(shù)藐翎,Swift 默認給生成一個包含所有成員變量的初始化構(gòu)造器


struct TestStruct {
  let num: Int
  let name: String
  let gender: String
}

// 如果這個結(jié)構(gòu)體 初始化 直接寫 
let test = TestStruct() // 會報錯

//第一種改進方法 給初值
// 第二種改進方法 
 let test = TestStruct(num: 0, name: "bob", gender: "man")

類的初始化

和結(jié)構(gòu)體不同,類必須聲明初始化構(gòu)造器

class LaunchSite {
    let name: String
    let coordinates: (String, String)
    
    init(name: String, coordinates: (String, String)) {
        self.name = name
        self.coordinates = coordinates
    }
}
// 如果去掉 init函數(shù) 將會報錯

指定構(gòu)造器

指定構(gòu)造器是對于 沒有默認值的非可選參數(shù)的初始化

class PuppyDog {
  var name: String
 
  init(name: String) {
    self.name = name
  }
}

遍歷構(gòu)造器

便利構(gòu)造器通常要調(diào)用類自身的便利構(gòu)造器或者指定構(gòu)造器橘忱,不管是哪種涯竟,最終都要調(diào)用指定構(gòu)造器.

//便利構(gòu)造器是在init前加一個關鍵子convenience赡鲜,它為一些屬性提供默認值:
class PuppyDog {
  var name: String
   
  convenience init(name: String) {
    self.init(name: name)
  }
}

子類的初始化

子類自身屬性的初始化需要在調(diào)用父類的初始化構(gòu)造器前完成,如下代碼
父類屬性的初始化庐船,需要在調(diào)用父類構(gòu)造器之后

Dart 里面的初始化

1 dart 里面 子類不能繼承父類的構(gòu)造函數(shù)

2 dart 如果你沒有聲明構(gòu)造函數(shù)银酬,默認有構(gòu)造函數(shù),默認構(gòu)造函數(shù)沒有參數(shù)筐钟,調(diào)用父類的無參構(gòu)造函數(shù)揩瞪。子類不能繼承父類的構(gòu)造函數(shù)(swift 結(jié)構(gòu)體里面有默認構(gòu)造函數(shù),類里沒有必須手寫),dart使用默認構(gòu)造函數(shù) ,聲明的屬性都會被賦初值nil 或者 0.

3.構(gòu)造函數(shù)就是一個與類同名的函數(shù),關鍵字 this 是指當前的篓冲,只有在命名沖突時有效李破,否則dart會忽略處理

class Point {
  int x;
  int y;
  Point(int x, int y) {
    this.x = x;
    this.y = y;
  }
  // 另外一種寫法
 // Point(this.x, this.y); 實例對象沒一個 參數(shù)對應一個屬性 做初始化
}

命名構(gòu)造函數(shù)(swift 中類似于指定構(gòu)造器 )

使用命名構(gòu)造函數(shù)讓類有多個構(gòu)造函數(shù)

class Point {
  int x;
  int y;
//  Point(int x, int y) {
//    this.x = x;
//    this.y = y;
//  }
  // 另外一種寫法
  Point(this.x, this.y);

  // 命名構(gòu)造函數(shù)
  Point.fromJson(Map json) {
    x = json['x'];
    y = json['y'];
  }
}

子類的構(gòu)造函數(shù)

子類構(gòu)造函數(shù)調(diào)用父類的默認構(gòu)造函數(shù),如果父類重寫了構(gòu)造函數(shù)壹将,必須手動調(diào)用父類的構(gòu)造函數(shù)嗤攻,在 : 號后面指定父類的構(gòu)造函數(shù)


class Person {
  Person.fromJson(Map data) {
    print("in Person");
  }
}
// 在:之后必須調(diào)用父類的構(gòu)造函數(shù)
class Employee extends Person {
  Employee.fromJson(Map data): super.fromJson(data) {
    print("in Employye");
  }
}

枚舉

swift

enum TestError: Error{
  case one
  case two
}

dart
枚舉類型是一種特殊的類,用于表示一個固定數(shù)量的常量值瞭恰,不能實例化屯曹,使用enum關鍵字聲明一個枚舉類型(swift 一樣)

void main(){
    print(Color.red.index);     // 0
    print(Color.green.index);   // 1
    print(Color.blue.index);    // 2
// print(TestError.one.hashValue) 這是swift 打下標 如果 沒有聲明  默認從0開始 

    // 獲得枚舉值的列表(swift 里面不能這樣寫)
    List<Color> colore = Color.values;
    print(colore[2]);   // Color.blue

    // 在switch語句中使用枚舉
    Color aColor = Color.blue;
    switch(aColor) {
        case Color.red:
            print("Red as Roses!");
            break;
        case Color.green:
            print("Green as grass!");
            break;
        default:
            print(aColor);
    }
}

enum Color {
    red,
    green,
    blue
}

類擴展

swfit 里面的類擴展

extension TestNameCell {
// 只能聲明計算屬性 聲明不了儲存屬性
  var i : Int {
    return 
  }
 // 不能被重寫 除非指定消息類型 比如 dynamic  
  func getName() {
    print("name")
  }
}

dart擴展類

class Musician extends Performer with Mnsical {
    // ...
}

class Maestro extends Person with Musical, Aggressive, Demented {
    Maestro(String maestroName) {
        name = maestroName;
        canConduct = true;
    }
}
//需要實現(xiàn) 擴展類
// 擴展類 相當于一個抽象類  不能實例化(類似于 swift中的protocol) 
abstract class Musical {
    bool canPlayPiano = false;
    bool canCompose = false;
    bool canConduct = false;

    void entertainMe() {
        if (canPlayPiano) {
            print('Playing piano');
        } else if (canConduct) {
            print('Waving hands');
        } else {
            print('Humming to self');
        }
    }
}

靜態(tài)方法

swift里面用Static 修飾 也可以說是類方法
static 可以修飾 struct, enum, class 里面的類方法
class 只是在class 里面修飾 計算屬性
static 可以在class 里面修飾計算屬性和儲存屬性
不過static 修飾的 方法 和屬性沒辦法被重寫

dart

// 基本上和swift里面是一樣的
void main(){
    var a = new Point(2, 2);
    var b = new Point(4, 4);
    var distance = Point.distanceBetween(a, b);
    print(distance);    // 2.8284271247461903
}

class Point {
    int x;
    int y;
    Point(this.x, this.y);

    static int distanceBetween(Point a, Point b) {
        var dx = a.x - b.x;
        var dy = a.y - b.y;
        return sqrt(dx * dx + dy * dy);
    }
}

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市惊畏,隨后出現(xiàn)的幾起案子恶耽,更是在濱河造成了極大的恐慌,老刑警劉巖颜启,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件偷俭,死亡現(xiàn)場離奇詭異,居然都是意外死亡缰盏,警方通過查閱死者的電腦和手機涌萤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來口猜,“玉大人负溪,你說我怎么就攤上這事〖醚祝” “怎么了川抡?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長须尚。 經(jīng)常有香客問我崖堤,道長侍咱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任密幔,我火速辦了婚禮楔脯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘胯甩。我一直安慰自己昧廷,他們只是感情好,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布蜡豹。 她就那樣靜靜地躺著麸粮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪镜廉。 梳的紋絲不亂的頭發(fā)上弄诲,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音娇唯,去河邊找鬼齐遵。 笑死,一個胖子當著我的面吹牛塔插,可吹牛的內(nèi)容都是我干的梗摇。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼想许,長吁一口氣:“原來是場噩夢啊……” “哼伶授!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起流纹,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤糜烹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后漱凝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疮蹦,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡患雇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年讯私,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片备禀。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡壁公,死狀恐怖感论,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情紊册,我是刑警寧澤比肄,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響薪前,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜关斜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一示括、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧痢畜,春花似錦垛膝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至线衫,卻和暖如春凿可,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背授账。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工枯跑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人白热。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓敛助,卻偏偏與公主長得像,于是被迫代替她去往敵國和親屋确。 傳聞我的和親對象是個殘疾皇子纳击,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學習記錄文檔,今天18年5月份再次想寫文章攻臀,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 2,732評論 2 9
  • 20- 枚舉,枚舉原始值,枚舉相關值,switch提取枚舉關聯(lián)值 Swift枚舉: Swift中的枚舉比OC中的枚...
    iOS_恒仔閱讀 2,242評論 1 6
  • 123.繼承 一個類可以從另外一個類繼承方法,屬性和其他特征焕数。當一個類繼承另外一個類時, 繼承類叫子類, 被繼承的...
    無灃閱讀 1,380評論 2 4
  • 這些天,兒子見我天天畫茵烈,天天更新百匆,忙的不亦樂乎,眼里充滿了羨慕呜投。還詢問我他的畫可不可以也發(fā)一發(fā)加匈,我騙他說小朋友的不...
    栗文閱讀 501評論 4 3
  • 去接園的時候,在門口等待仑荐,突然意識到自己線上分享已經(jīng)錄好的音頻有一個知識點不嚴謹雕拼,必須重錄。而播報的時間是第二天的...
    喜微的心靈花園閱讀 209評論 0 0