swift語法知識(類結構體,構造函數,值和引用)

来源:http://www.cnblogs.com/sunlin-1234/archive/2016/01/29/5167956.html
-Advertisement-
Play Games

類和結構體: 定義語法: class SomeClass{ //定義類的成員 var name:String = "" var age:Int = 18 var job:String?//可選可以為空 } struct SomeStruct{ //定義結構體的成員 let sex:String =


類和結構體

定義語法:

class SomeClass{

      //定義類的成員
    var  name:String = ""
    var  age:Int = 18
    var job:String?//可選可以為空
}

struct  SomeStruct{

      //定義結構體的成員
    let sex:String = ""
     
}

//通常一個類的實例被稱為對象

//實例化類和結構體
let someclass = SomeClass()
let somestruct = SomeStruct()

在Swift語言中,類和結構體有很多相同之處。它們都可以:

● 定義屬性來存儲值
● 定義方法來提供功能
● 定義初始化器來設置它們的初始化狀態
● 可以被擴展,擁有預設實現之外的功能
● 遵從協議來提供一種特定的標準功能

當然也有區別,結構體沒有類的繼承父類或其他類特性的能力,結構體是值類型,類是引用類型。

類是引用類型

與值類型不同,引用類型在被賦予到一個變數、常量或者被傳遞到一個函數時,其值不會被拷貝。因此,引用的是已存在的實例本身而不是其拷貝。

結構體和枚舉是值類型

值類型被賦予給一個變數、常量或者傳遞給一個函數的時候,他的值或被拷貝。(Swift 中,所有的基本類型:整數(Integer)、浮點數(floating-point)、布爾值(Boolean)、字元串(string)、數組(array)和字典(dictionary),都是值類型,並且在底層都是以結構體的形式所實現。)

構造器使用init關鍵字來申明一個構造器,它可以有參數但是構造器沒有返回值。

struct Fathernherit {

      var temp:Double

      init(){
     
            temp = 32.0
 
           }

}
var f = Fathernherit()
print("The temp is \(f.temp)  Fathernherit ")

//輸出:The temp is 32.0  Fathernherit

類和結構體的選擇

但是,結構體實例始終是傳值,類實例始終是傳遞引用,也就是說他們適用於不同類型的任務。我們根據項目的需要考慮數據的結構和功能,決定每個數據類型應該被定義為類還是結構體。
通常的一個規則是符合以下一個或多個條件時考慮使用結構體去定義:
● 這個結構的主要目的是封裝少量相對簡單的數據的值。
● 結構的實例賦值或傳值的時候,封裝的值被拷貝而不是引用。
● 任何一個屬性被結構體存儲時是他們自身值類型,是拷貝而不是引用。
● 結構不需要繼承其他類型的屬性或行為。
適合使用結構體的例子:
● 描述一個幾何形狀的尺寸,封裝了均為Double類型的寬和高兩個屬性。
● 描述一個範圍,封裝了一個Int類型的開始屬性和一個Int類型的長度屬性。
● 用來描述一個三維坐標系統中的一點,封裝了Double類型的x、y和z三個屬性。
所有其他情況使用類定義並創建類的實例通過引用方式管理和傳遞。事實上,大多數的數據結構應該用使用類而不是結構體。

 

從一個界面跳轉到另一個界面push有兩種方法

1.程式代碼實現

let scondViewController = self.storyboard?.instantiateViewControllerWithIdentifier("scondViewController") as! ComicLsitViewController
scondViewController.artistName = label.text!
self.navigationController?.pushViewController(scondViewController,animated:true)

2.storyboard實現

首先點擊viewcontroller->Editor->Embed in -> Navigation Controller 下一步就是關聯界面如下圖。

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 解決的問題:需要讀取某個大文件夾下所有子文件夾中的excel文件,並彙總,彙總文件中需要包含的2部分的信息:1.該條數據來源於哪個子文件夾;2.該條數據來源於哪個excel文件。最終,按照子文件夾單獨保存彙總文件,或者只保存成一個彙總文件。 場景描述:抓取了各個APP的使用數據,分散地保存在各個文件
  • 學習背景: 我在西藏拉薩出差已經連續將近2個月了,實時想到會精通一門編程語言並編寫出自己想要的程式是我多年的夢想,一定找時間實現,回想高中時,自己對編程的興趣十分濃厚,父母給自己購買了學習機插卡式的,只能敲basic代碼,同時學校有電腦課,經常和老師討論編程問題,時光一晃20多年過去了,編程放下了
  • Codeforces 55D Beautiful Number a positive integer number is beautiful if and only if it is divisible by each of its nonzero digits. Input The first l
  • 通過實際項目中對eventbus的應用來分析它能解決的問題以及當初應用有待提高的地方。很顯示eventbus應用得當可以簡化程式複雜性,提高代碼可讀性,降低開發維護成本。
  • 最近項目中有一個這樣的需求,要做一個定時任務功能,定時備份資料庫的操表,將表數據寫入txt文件。因為文件的讀寫路徑可能需要隨時改動,所以寫死或者寫成靜態變數都不方便,就考慮使用配置文件,這裡總結些配置文件用法。 一、Java Properties類 1、Java中有個比較重要的的類Propertie...
  • 1 背景概述 數通暢聯本著分享傳遞的理念已經將產品家族中的核心產品開源,目的在於滿足客戶與伙伴的OEM需求,以及為廣大IT愛好者的集成工具提供多一種選擇,多一種便利。如果需要對產品進行擴展開發或者更深層次的瞭解產品可以在svn中check out源碼。 本文詳細介紹BPM、Portal、SMC工程在
  • 題外:做過一陣開發,後來接觸了很多東西,改變了觀念,比較浮躁,嘗試過轉行各種崗位,最後做了網路運營,其間走的彎路中學到了很多東西,時間推移開發扔了很久,故此閑暇時間複習下。 概述:沒有寫技術博客的經驗,看過的博客也不喜歡長篇大論,比較喜歡直觀看代碼,學習的習慣是行動中理解,如果需要深入瞭解我會看一些
  • 一、memcached是什麼? 二、memcached不互相通信的分散式 三、安裝步驟 四、本文介紹的命令主要包括: 存入命令(Storage commands) 取回命令(Retrieval command) 刪除命令(Deletion) 統計(Statistics) 其他命令 五、java客戶端
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...