苹果新的编程语言 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,numbersin 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.mzph.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://…