蘋果新的編程語言 Swift 語言進階(一)--綜述

? ? ?? ? Swift 是蘋果開發和提供的供開發IOS 和OS X應用的一門新的語言。Swift語言基于C 和Objective-C語言,除了提供C 和Objective-C語言具有的所有語法功能外,為了編程方便和高效,Swift在語法上作了大量的優化和改進。

? ? ? ? ?Swift采用安全編程模式,具有許多先進的強大的功能 ,如動態運行時、編譯動態進行類型檢查、Closures、下標功能、自動引用計數、選項類型、通用類型和類型編譯時推斷、類型的擴展和嵌套、協議類型、功能和類型的通用化、操作符的定制和添加。 ? ? ??

? ? ? ? ?Swift語言的設計思想是:語言和編譯器承擔不同的職責,語言本身承擔程序語義的呈現,為程序編寫服務,為提高編程效率進行了最大程度的優化;而編譯器承擔語言的理解和編譯職責,對程序的執行效率和性能進行最大程度的優化。

? ? ? ? ?因此Swift語言在設計時在保持語義可理解的基礎上為了提供編程效率在語法上做了最大程度的優化,使語言本身更加干凈和簡潔,功能更加強大、更富有表現力,并不失靈活性,如實現了語言語法上的面向對象和過程化部分的有機統一、去除了c 語言的語法上的諸多限制等。

? ? ? ? Swift語言通過語言和編譯器兩方面的優化使 采用Swift 語言進行編程更加容易、編程效率更高,同時程序的 執行效率和安全又得到保證。? ? ? ?

?? ? 一、Swift語言的簡潔性、靈活性

? ? ? ? Swift語言為了保持語言的簡潔在語法的各個方面(包括程序結構、關鍵字等)進行了優化,在不失理解性的基礎上去除了冗余的語法,能夠交給編譯器的工作盡量交給編譯器處理。

? ? ? ? 如 每個語言實現的第一個程序,打印一條"Hello, world”。

? ? ? ? Swift語言為了實現上述功能只是下面的一條語句。

?? ? ? ?println("Hello, world”)

? ? ? ? ?該語句在Swift語言中就是一個完整的程序 ,不需要輸入另外的分離的庫和頭文件,也沒有通常語言都有的main?函數聲明,就連語句最后的分號也省略了。

? ? ? ? ?Swift語言也沒有C語言通常的頭文件,所有的實現和聲明都在一個后綴為.swift的文件中,這也是為了提高編程效率的需要,不需要用戶維護兩個文件。對于其它代碼需要的某個類的接口可以自動獲得和使用。

? ? ? ? Swift語言對關鍵字的命名在不失準確性的基礎上也是盡量的簡化,如整數類型為Int,而不是Integer,布爾類型是Bool而不是Boolean等。

?? ? ? ? Swift語言對循環語句添加了for-in形式,使其更加容易地對數組、詞典、范圍、字符串和其它序列進行遍歷。

? ? ? ?為了語言的干凈,包圍條件和循環變量的圓括號也被省略了。

? ? ? ? 如:

for (kind,numbers)?in?interestingNumbers {

? ?for?number?in?numbers {

? ? ? ? if?number >largest {

? ? ? ? ? ?largest =number

? ? ? ? }

? ? }

}

? ? ? ? 對于Switch控制結構也作了語法的簡化,為了語法的簡潔和更少的的出錯,在每個對應Switch的case的執行代碼執行完后,程序自動退出switch語句,不再繼續執行下面的case 語句,因此不需要在每個case對應的執行代碼后添加一個冗余的break語句。而其它語言如C語言需要在每個case 語句后面添加多余的break語句,用戶也經常會忘記添加這個多余的break語句,因此造成程序邏輯出錯。

? ? ? ? ? ?Swift語言雖然在語法上進行了去冗余化工作,但在語法功能上卻沒有精簡,反而大大增強了功能,除了支持C語言和Objective-C語言的幾乎所有功能外,還添加和增強了許多功能,如下標功能、元組類型、選項類型、類型的擴展和嵌套、功能和類型的通用化、操作符的定制和添加等許多功能。

? ? ? ?另外Swift語言更加靈活,相對c 語言或其它語言具有更少的語法限制。如

? ? ? ?Swift語言的注釋像c 語言一樣支持以//開始的單行注釋,也支持/* */形式的多行注釋。但沒有了c 語言對多行注釋不能嵌套的限制,Swift 的多行注釋支持嵌套。如下所示 :

?? ?

? ? ? /* this is the start of the first multiline comment

/* this is the second, nested multiline comment */

this is the end of the first multiline comment */

? ?Swift還支持使用println功能或print直接打印一個變量或常量的值,或者插入一個字符串類型中進行輸出。。


?var?friendlyWelcome =“Hello!"

? println(friendlyWelcome)

? println("The current value of friendlyWelcome is\(friendlyWelcome))。


? ? ? ? 總之,Swift語言在語法語句上雖然與C語言相似,但在語法的許多方面作了許多精簡和增強,可以說Swift語言是C語言的精簡化、Objective-C語言的功能增強化,并且具有腳本語言的表達化等特點,因此Swift語言是一門語法更自然,表達更豐富的語言。


?二、Swift語言的安全性和語義清晰性

? ? ?Swift是一門類型安全的語言,即在編譯階段必須進行類型檢查明確使用到的每個變量或常量的類型。類型安全的語言可以在開發編譯階段更好的發現和修改類型使用上的錯誤,可以開發一個更加安全可靠的程序。

??

? ? ?Swift在編譯代碼時進行類型檢查,但不意味著必須為每一個聲明的常量或變量規定類型。

? ? ?Swift編譯器提供了類型推斷機制--編譯代碼時,通過簡單檢查你提供的表達式的值自動推斷表達式的類型。


? ? ?由于Swift使用類型推斷,Swift可以提供比其它語言更簡潔的類型聲明語法,雖然語法簡潔,但類型仍然能夠在編譯階段被明確確定。Swift的編譯器推斷類型功能在Swift語言要求的類型安全與語法的簡潔上做到了最好的統一。

?? ? 如當你使用一個初始值來聲明一個常量或變量時,Swift編譯器能夠自動根據變量或常量的初始值來推斷變量或常量的類型。

? ?let?maximumNumberOfLoginAttempts =10

? ?var?currentLoginAttempt =0

? ? ?對于上面的對maximumNumberOfLoginAttempts常量和currentLoginAttempt變量的聲明,Swift能夠推斷其為Int類型。

? ? let?pi?=?3.14159

? ?上面語句Swift推斷你想創建一個Double類型的常量。Swift總是推斷一個浮點數的類型為Double。

? ?如變量或常量在聲明時沒有提供初始值,使Swift編譯器不能推斷其類型,就需要明確的為其指定類型。如下所示,聲明一個字符串類型的變量。

? ???var ?welcomeMessage: String

? ? 因此Swift還是一門語義更加安全、更加清晰的語言。

轉載于:https://www.cnblogs.com/aiwz/p/6154489.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/273709.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273709.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273709.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

總結3:IDEA中使用${pageContext.request.contextPath}填寫路徑時出錯

問題描述&#xff1a; 之前一個項目在eclipse中開發的&#xff0c;其中有使用到 <jsp:include page"${pageContext.request.contextPath}/../head.jsp"/>啟動項目成功&#xff0c;訪問出錯。在換到IDEA中啟動項目時提示路徑出錯&#xff0c;當把路徑修改為 …

操作12864(ST7920控制器)

引腳部分查看中文的12864介紹&#xff0c;下面這些可以在ST7920的英文數據手冊里查到。 Function Description 部分介紹工作方式、存儲器、操作方法。Instructions 部分介紹指令。按照并行或串行的 Timing Diagram 來操作&#xff0c;注意數據何時有效。查看初始化的流程圖&…

問題之傳遞參數名和接收參數名要一致。

前端傳遞發送的Ajax請求&#xff0c;請求參數為data data: {organizationId:$("#organId").val()},//data.field 后端接受參數 //錯誤接受參數 RequestMapping(value "") ResponseBody public Object findAll(Integer organId) { return…

總結4:input文本輸入框自動提示

1、頁面效果 2、引入CSS/JS <link rel"stylesheet" href"css/jquery-ui.min.css"><script src"https://code.jquery.com/jquery-1.12.4.js"></script><script src"https://code.jquery.com/ui/1.12.1/jquery-ui.js&qu…

Map集合遍歷

//創建一個map對象并賦值Map<String, String> map new HashMap<String, String>();for (int i 0; i < 10; i) {map.put("Key" i, "Value" i);}//使用keySet便利Set<String> keySet map.keySet();for (String s : keySet) {Syste…

MySql數據同步FEDERATED引擎

概要&#xff1a;FEDERATED存儲引擎訪問在遠程數據庫的表中的數據&#xff0c;而不是本地的表。這個特性給某些開發應用帶來了便利&#xff0c;你可以直接在本地構建一個federated表來連接遠程數據表&#xff0c;配置好了之后本地表的數據可以直接跟遠程數據表同步。實際上這個…

SpringBoot 配置多數據源(Sql Server、MySql)

創建SpringBoot項目就不說了。(直接使用IDEA創建就好了) 整個目錄結構如圖&#xff1a;&#xff08;不用管圖中報錯&#xff0c;項目是在另一臺電腦上寫的。報錯是沒有jar包&#xff0c;因為網絡比較慢。&#xff09; 1、主要pom.xml <dependencies><dependency>…

【SQL語句】MySql、SqlServer查詢近期記錄

#-------------------------MYSQL------------------------- #每小時記錄 SELECT HOUR(open_time) hourNum, COUNT(1) hourCount FROM b_entrance_guard_record GROUP BY HOUR(open_time) #近六個月出入記錄 SELECT MONTH(n.open_time) monthNum, COUN…

SpringBoot 記錄操作日志

目錄結構&#xff1a; 1、創建springboot項目&#xff0c;添加依賴。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>…

SpringBoot 配置記錄

# 圖片上傳 配置圖片上傳大小 spring:servlet:multipart:max-file-size: 100MBmax-request-size: 100MBdatasource:#數據庫文件存放 /doc/sql目錄下url: jdbc:mysql://localhost:3306/merchant_pay?useUnicodetrue&characterEncodingUTF-8&autoReconnecttrue&f…

py2.7+pyqt4開發端口檢測工具

py2.7pyqt4開發端口檢測工具 使用工具&#xff1a;python2.7,pyqt4,pyinstaller,pywin32 先貼代碼 1 import sys2 from PyQt4 import QtGui,QtCore3 4 import threading5 import thread6 import os7 import re8 import urllib9 import socket10 import time11 12 13 global max…

MySql 創建存儲過程

DELIMITER $$ #以delimiter來標記用$表示存儲過程結束 CREATE PROCEDURE ownerapartment() ##創建pre()存儲方法 BEGIN DECLARE i INT; #定義i變量 SET i1; WHILE i<35 DO #對i的值配置INSERT INTO owner_apartment (id, owner_id,property_id, community_id, buildi…

opencv 和 parfor

一次遇到兩個不熟悉的&#xff0c;因此在一起記一下。 OpenCV的全稱是&#xff1a;Open Source Computer Vision Library。 OpenCv是一個基于&#xff08;開源&#xff09;發行的跨平臺計算機視覺庫&#xff0c;可以運行在Linux,Windows和Mac OS操作系統上。它輕量級而且高效—…

POI 導出

1.添加依賴 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency> 2.POI工具類 import java.io.UnsupportedEncodingException; import javax.servlet.http.Htt…

度量空間的基本性質

收斂性 $\bf命題&#xff1a;$ 連續性 $\bf命題&#xff1a;$ 稠密性 $\bf命題&#xff1a;$設$E$為度量空間$X$中的點集&#xff0c;則$E$在$X$中稠密的充要條件是對任意的$x \in X$&#xff0c;存在點列$\left\{ {{x_n}} \right\} \subset E$&#xff0c;使得${x_n} \to x\…

@Value 注入靜態變量

1、定義配置類 Component public class FilePathConfig {public static String httpResUrl;public static String savePath;public static String resUri;public String getHttpResUrl() {return httpResUrl;}Value("${file.path.httpResURL}")public void setHttpR…

配置錯誤定義了重復的“system.web.extensions/scripting/scriptResourceHandler” 解決辦法...

今天遇到了這個問題&#xff0c; 電腦系統&#xff1a;vs2010 win7系統 iis7 我運行在iis中配置的那個網站后&#xff0c;報錯&#xff1a;錯誤代碼 0x800700b7 配置錯誤定義了重復的“system.web.extensions/scripting/scriptResourceHandler”節 這個問題原因在于window7的II…

Base64 四種方式的編碼和解碼

base64與字符串String之間的相互轉換 package com.wzq;import javax.xml.bind.DatatypeConverter; import java.io.UnsupportedEncodingException; import java.util.Base64;/*** ClassName Base64Utils* Description: TODO* Author wzq* CreateDate 2019/10/14* UpdateDate 2…

郵件服務器“單點登錄”功能

現狀分析&#xff1a; 相信我們每個人都有這樣的經歷&#xff0c;比方說銀行卡多的人要具體記憶每張卡的密碼挺麻煩&#xff1b;現代人興 趣廣泛&#xff0c;愛好多多&#xff0c;運動健身俱樂部、娛樂游戲休閑、購物理財等各種場合少不了獲得入門的“通行證”&#xff0c;要輸…

【kafka】 windows平臺搭建及使用

一、安裝 kafka 需要java環境&#xff1b;kafka 最新版本內置了 zookeeper&#xff0c;所以不需要安裝zookeeper&#xff1b;下載kafka最新版本&#xff0c;因為下載的是tgz文件&#xff0c;所以不需要安裝&#xff0c;解壓到相應的地方就可以了。下載地址&#xff1a;http://…