1. 程式人生 > >Swift 構造過程 1

Swift 構造過程 1

Swift 的類、結構體、列舉構造完成後它們的所有儲存屬性一定有一個值

儲存屬性可以在宣告的時候直接給定一個預設值或者在構造的時候賦值,可選屬性在初始化的時候會被賦值nil

構造器的語法

自定義外部引數名稱

struct Counter {
    let max : Int
    var min = 9
    var current:Int?
    //自定義外部名稱
    init(maxValue a : Int,minValue b:Int) {
        max = a
        if b < 0 {
            min =
b } } }
  • 我們定義一個結構體Counter,並提供一個構造器init(maxValue a : Int,minValue b:Int) 類似於函式這個構造器我們可以指定外部引數名稱(maxValue,minValue)用於區分不同的構造器。

  • 對於儲存屬性我們既可以在宣告的時候給定預設值也可以在構造的過程中重新設定,如在上面的構造過程中只有當b<0時才對min賦值。對於常量屬性我們可以在構造的過程中賦值(沒有預設值的情況)

  • 對於可選屬性如果我們在構造的過程中沒有給它賦值,它將自動獲得一個值nil

上面的構造器可以這樣呼叫:var a = Counter(maxValue: 100, minValue:0)

預設外部引數名稱


struct Counter {
    let max:Int
    var min = 9
    var current:Int?
    //自定義外部名稱
    init(maxValue a : Int,minValue b:Int) {
        max = a
        if b < 0 {
            min = b
        }
    }
    //預設外部引數名稱
    init(max:Int) {
        self.max = max
        min = 0
    }
}
  • 構造器init(max:Int)

    我們並沒有顯示宣告函式外部名稱它將自動獲得一個與內部名稱一樣的外部名稱

  • 在構造器裡面我們可以使用屬性名直接引用屬性,但是如果構造器的內部引數名稱與屬性名重名可以使用self.propertyName這個格式來引用屬性

上面的構造器可以這樣呼叫:var b = Counter(max: 50)

忽略外部引數名稱

struct Counter {
    let max:Int
    var min = 9
    var current:Int?
    //自定義外部名稱
    init(maxValue a : Int,minValue b:Int) {
        max = a
        if b < 0 {
            min = b
        }
    }
    //預設外部引數名稱
    init(max:Int) {
        self.max = max
        min = 0
    }
    //忽略外部引數名稱
    init(_ a:Int,_ b:Int) {
        //值型別的構造器代理(列舉和結構體)
        if a > b {
            self.init(maxValue: a, minValue: b)
        }else {
            self.init(maxValue: b, minValue: a)
        }
    }

}
  • 如果我們不想使用外部引數名稱可以用_表示忽略

  • 對於值型別來說在一個構造器中可以直接代理它本身的其他構造器來完成一部分構造過程

上面的構造器可以這樣呼叫:var c = Counter(20,100)

預設構造器

如果結構體和類所有的屬性都有預設值它們將自動獲得一個預設構造器

class Person {
    var givenName = "仙貝"
    var lastName = "落霞"
    var age:Int?
}

對於類(也可以是結構體)來說,如果它的所有屬性都有存在一個預設值它將自動獲得一個預設構造器,你可以使用預設構造器來初始化這個類:var f = Person()

結構體的逐一成員構造器

struct Color {
    //如果結構體或者類所有的屬性都都有預設值,它將自動獲得一個預設構造器
    //如果結構體沒有自定義構造器它將自動獲得逐一成員構造器(常量屬性除外)
    var r = 124
    let g = 255
    var b:Int?
}

如果結構體沒有自定義構造器它將獲得一個逐一成員構造器,對於上面的結構體Color你可以通過兩種方法初始化:

  • 通過預設構造器var d = Color()

  • 通過結構體逐一成員構造器 var e = Color(r: 255, b: 244)

END

相關推薦

Swift 構造過程 1

Swift 的類、結構體、列舉構造完成後它們的所有儲存屬性一定有一個值 儲存屬性可以在宣告的時候直接給定一個預設值或者在構造的時候賦值,可選屬性在初始化的時候會被賦值nil 構造器的語法 自定義外部引數名稱 struct Counte

swift學習筆記(五)構造過程

不能 學習筆記 結構體 rri -a 依據 類的屬性 去掉 trac 構造過程是為了使用某個類、結構體或枚舉類型的實例而進行的準備過程。在構造過程中,對每一個屬性進行了初始值預設和其它必要的準備和初始化工作。 與OC相比,swift的構造函數。不須要返回值。同一時候,在

編譯原理——LL(1) 文法First,Follow集合的構造過程

  LL(1)文法是上下文無關文法的一個真子集,在學習過程中我們通常需要了解如何判斷一個文法屬於LL(1)文法。來了解判斷條件之前我們需要構造First,Follow, Select三個集合。以下介紹三個集合的定義,含義,結合例項來體會這些集合的構造過程。 1. First

swift的兩段式構造過程

swift中構造過程分為兩步: 1.指定初始值 2.給每個類一次機會,進一步定製自己的儲存屬性。 兩段式構造過程可以防止屬性在初始化之前被訪問。 註釋 swift與oc的很大不同之處在於:oc

iOS-swift-基礎篇1

自動 lan style blank ase ani dev per 程序 一.swift是啥?答:百度。 二.swift基礎知識。 1.輸出函數:print print("Hello, world!") 2.簡單數據類型 變量聲明:var   常量聲明:let

Swift 了解(1)

objective 提高 集合類型 red 方括號 不同的 ats there 替換   Apple取消了oc的指針以及其他不安全的訪問的使用,舍棄的smalltalk語法,全面改為點語法,提供了類似java的命名空間 範型 重載;   首先我們了解一下Swift這門語言。

Swift迎來了1.0 GM 版(2014.09.09)

mod nal 應用 ng- ont 拒絕 content swift trac 2014年6月2日,swift開發團隊將swift語言公之於眾。而2014年9月9日迎來了swift的第二個裏程碑,swift1.0版本號(GM),這意味著無論你的應用有一部分功能是用

ASP.NET請求過程-1

引入 ava 地址 cto dns解析 ffffff div 對象 關鍵詞 客戶端發送請求到達服務器 輸入域名->DNS解析->指定IP 服務器(如果網頁直接輸入IP地址則直接到服務器)->請求到達服務器->HTTP.SYS接受HTTP請求-&g

swift基礎語法1.23

post 邏輯運算 但是 pri clas for in swift 方向 swift基礎 主要是swift的基礎語法,其中print("其中為 輸出內容"),但是加入你在其中加入一個反斜杠的話,那麽就表示裏面可以坐成一個表達式,例如如果a+B=5 ,print("\(a+

Swift 構造與析構

前言 pri logs 允許 arr 管理 必須 直接 生命周期 前言 與 OC 一樣,Swift 中也存在構造和析構過程。不同的是,OC 中的構造方法和析構方法只是普通的方法,而 Swift 中構造器和析構器是一種特殊的結構。 1、構造器 在 Swift 中,類或者

快看Sample代碼,速學Swift語言(2)-基礎介紹 快看Sample代碼,速學Swift語言(1)-語法速覽

ora ati 自動 一起 系統 welcome 布爾類型 效率 八進制 快看Sample代碼,速學Swift語言(2)-基礎介紹 Swift語言是一個新的編程語言,用於iOS, macOS, watchOS, 和 tvOS的開發,不過Swift很多部分內容,我們可以從

Swift編碼總結1

atm 本質 smi reg mode bsp ani any 一個 1. fileprivate (set) var hasSetDiscount = false中fileprivate (set)表示什麽意思: //設置setter私有,但是getter為publi

資料結構造輪子1-----棧

Stack.h #pragma once #define MAX_LENGTH 100 class Stack { public: virtual void InitStack() = 0; //主要操作 virtual bool Push(int & data) =

AM335x U-boot d程式碼分析過程1

題外話: 經過一段時間的學習,對u-boot-2014.10有了初步的瞭解,趁著還記著,趕緊寫下來,同時將之前還模稜兩可的部分用圖表的方式加強一下。 原始碼分析 彙編部分 之前一直看的是ARM9的u-boot,

iOS Objective-C與Swift開發過程的詳細比較

前段時間,本人同時開發了兩個專案,一個用的OC,一個用的Swift。在使用中對兩種語言進行一次梳理與比較。 基礎檔案 OC Swift OC程式裡,一個類會有兩個檔案,.h和.m。.h可以寫屬性、方

過程1】——階段收穫

    堅信在這個過程中一定會得到意想不到的收穫成長,站到家長的角度需要具備一雙發現的眼睛來一睹這個過程帶來的神奇與美。     2018年09月15日晚:今天晚上來到久違的地方,已經在這裡度過了20多

idea打包spark程式在叢集上執行過程(1)

第一步: 第二步: 第三步: 第四步: 第五步: spark-submit --master yarn --deploy-mode cluster --driver-memory 4G --executor-memory 5g --num

Mybatis的SqlSessionFactory構造過程

建立SqlSession的關鍵是先建立SqlSessionFactory,建立SqlSessionFactory需要提供配置檔案和相關的引數,然後可以使用SqlSessionFactoryBuilder去建立SqlSessionFactory,提供Configu

易學筆記-Graylog日誌工具/1 安裝過程/1.5 線上安裝Graylog

易學筆記 十年IT經驗個人學習筆記分享: 開發語言:C/C++/JAVA/PYTHON/GO/JSP WEB架構:Servlets/springMVC/springBoot/springClound 容器架構:Docker容器/Docker叢集/Docker與微服務整合/

易學筆記-Graylog日誌工具/1 安裝過程/1.3 線上安裝MongoDB

易學筆記 十年IT經驗個人學習筆記分享: 開發語言:C/C++/JAVA/PYTHON/GO/JSP WEB架構:Servlets/springMVC/springBoot/springClound 容器架構:Docker容器/Docker叢集/Docker與微服務整合/