1. 定义常量和变量

a. Swift语法

常量:

let MaxNumber = 10

变量:

var name = 1

b. Java语法

常量:

public final int MaxNumber= 10;

变量:

public String name = "morden";

这里要注意的是swift有类型标注(type annotation)这个语法:如果要添加类型标注,需要在常量或者变量名后面加上一个冒号和空格,然后加上类型名称。但是因为swift编译器可以进行类型安全判定,所以一般为了代码简练,

可以不加类型标注,关于类型标注,后面会有提到。加类型标注的语法如下:

常量:

let MaxNumber :Int = 10

变量:

var name : String = "morden"

常量与变量名不能包含数学符号,箭头,保留的(或者非法的)Unicode 码位,连线与制表符。也不能以数字开头,但是可以在常量与变量名的其他地方包含数字。

2. Swift和Java的输出语法

Swift:

print("hello world")

Java

System.out.println("hello world");

3. 注释

Swift和Java注释大体相同,都可以单行注释和多行注释。唯一不同点就是Swift支持多行注释可以嵌套在其它的多行注释中。

/*这是第一个多行注释的开头

/* 这是第二个被嵌套的多行注释*/这是第一个多行注释的结尾 */

4. 分号

Java要求每一行代码都有分号,而Swift不同,不要求每一行必须有分号,但是一种情况除外:当在同一行内写多条独立的语句时候,每个语句需要分号隔开

let apple : String = "apple" ; print("hello world");

5. 类型标注

类型标注:在Swift中,每次声明常量和变量的时候,不是一定要显式指定类型。如果你没有显式指定类型,Swift 会使用类型推断(type inference)来选择合适的类型。有了类型推断,编译器可以在编译代码的时候自动推断出表达式的类型。Swift 和Java都是一个类型安全(type safe)的语言。如果你申明的变量是String类型的时候,再对其进行赋值时候,传了int类型,编译器会报错。但是在语法上,这两个语言有所不同。

Java一般申明变量时候,会将类型放在前面,如下代码:

String name = "morden";

Swift会将类型放在后面,如下代码:

var name : String = "morden"

而有时候,我们申明变量时候,不加类型,编译器就会自己推断变量类型,这就是类型标注

在Swift中,具体类型标注代码如下:

let number = 42

number会被推测为 Int 类型

let anotherNumber = 3 + 0.14159

原始值 anotherNumber 没有显式声明类型,而表达式中出现了一个浮点字面量,所以表达式会被推断为Double类型。

6. 数值型字面量

Swift和Java在数值型字面量方面有很多异同,只有十进制和16进制表示是相同的。

Swift:

一个十进制数,没有前缀

一个二进制数,前缀是0b

一个八进制数,前缀是0o

一个十六进制数,前缀是0x

Java:

一个十进制数,没有前缀

一个二进制数,Java没有二进制的表示方式,一般都16进制表示

一个八进制数,前缀是0

一个十六进制数,前缀是0x

另外,Swift数值类字面量可以包括额外的格式来增强可读性。整数和浮点数都可以添加额外的零并且包含下划线,并不会影响字面量:

let paddedDouble = 000123.456let oneMillion=1_000_000

let justOverOneMillion= 1_000_000.000_000_1

7. 整数和浮点数转换

Swift:Swift中不支持隐式转换,当两个变量存储不同范围的值时候,所以你必须根据不同情况选择性使用数值型类型转换。代码如下:

let three = 3let pointOneFourOneFiveNine= 0.14159let pi= Double(three) + pointOneFourOneFiveNine

这个例子中,常量three的值被用来创建一个Double类型的值,所以加号两边的数类型须相同。如果不进行转换,两者无法相加。

Java支持隐式转换,代码如下:

int three = 3;double pointOneFourOneFiveNine = 0.14159;double pi = three + pointOneFourOneFiveNine;

Swift语法支持类型别名,这点Java不支持,当在编程中,定义了一个类型别名之后,你可以在任何使用原始名的地方使用别名。具体代码如下:

typealias AudioSample =UInt16

var maxAmplitudeFound= AudioSample.min

UInt16 取值范围是0-255maxAmplitudeFound 现在是 0

8. 布尔值

Swift的布尔(Boolean)类型,关键字叫做Bool。Java是boolean关键字。具体用法上有点差别,但是还在接受范围之内。

Swift:

let flag : Bool = false

ifflag{

print("Mmm, tasty turnips!")

}else{

print("Eww, turnips are horrible.")

}

Java:

boolean flag = true;if(flag){

System.out.println("Mmm, tasty turnips!");

}else{

System.out.println("Eww, turnips are horrible.");

}

9. key-value

Swift提出了一个非常有意思的语法叫元组。有点类似Java的map数据结构,但是又与map有非常大的不同。这里介绍下元组的用法。

let http404Error = (404, "Not Found")// http404Error 的类型是 (Int, String),值是 (404, "Not Found")let http200Status= (statusCode: 200, description: "OK")

//可以在定义元组的时候给单个元素命名:

可以将一个元组的内容分解(decompose)成单独的常量和变量,然后你就可以正常使用它们:

print(statusCode)

print("The status code is \(http404Error.0)")

print("The status code is \(http404Error.statusCode)")

print(statusMessage)

print("The status code is \(http404Error.1)")

print("The status code is \(http404Error.description)")

10. 可选类型(optionals)

我们先看下面一段代码:

let possibleNumber = "123"let convertedNumber=possibleNumber.toInt()//convertedNumber 被推测为类型 "Int?", 或者类型 "optional Int"

因为toInt方法可能会失败,所以它返回一个可选类型(optional)Int,而不是一个Int。一个可选的Int被写作Int?而不是Int。问号暗示包含的值是可选类型,也就是说可能包含Int值也可能不包含值。(不能包含其他任何值比如Bool值或者String值。只能是Int或者什么都没有。)

当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号(!)来获取值。这个惊叹号表示“我知道这个可选有值,请使用它。”这被称为可选值的强制解析(forced unwrapping):

let possibleNumber = "123"let convertedNumber=Int(possibleNumber);

let stee= convertedNumber!

//stee 是Int,不是Int?

可选绑定(optional binding):来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。看下面代码:

let possibleNumber = "123"

if let actualNumber =Int(possibleNumber) {

print("\(actualNumber) has an integer value of \(actualNumber)")

}else{

print("\(possibleNumber) could not be converted to an integer")

}//输出 "123 has an integer value of 123"

“如果possibleNumber.toInt返回的可选Int包含一个值,创建一个叫做actualNumber的新常量并将可选包含的值赋给它。”

如果转换成功,actualNumber常量可以在if语句的第一个分支中使用。它已经被可选类型包含的值初始化过,所以不需要再使用!后缀来获取它的值。在这个例子中,actualNumber只被用来输出转换结果。

11. nil

在 Swift 中,nil不是指针——它是一个确定的值,用来表示值缺失。任何类型的可选状态都可以被设置为nil,不只是对象类型。一些简单的用法如下:

var serverResponseCode: Int? = 404

//serverResponseCode 包含一个可选的 Int 值 404

serverResponseCode =nil//serverResponseCode 现在不包含值

var surveyAnswer: String?

//surveyAnswer 被自动设置为 nil

12. 隐式解析可选类型

隐式解析可选类型(implicitly unwrapped optionals)。把想要用作可选的类型的后面的问号(String?)改成感叹号(String!)来声明一个隐式解析可选类型,隐式解析可选类型主要被用在 Swift 中类的构造过程中。

一个隐式解析可选类型其实就是一个普通的可选类型,但是可以被当做非可选类型来使用,并不需要每次都使用解析来获取可选值。下面的例子展示了可选类型String和隐式解析可选类型String之间的区别:

let possibleString: String? = "An optional string."println(possibleString!) //需要惊叹号来获取值//输出 "An optional string."

let assumedString: String! = "An implicitly unwrapped optional string."println(assumedString)//不需要感叹号//输出 "An implicitly unwrapped optional string."

注意:

如果你在隐式解析可选类型没有值的时候尝试取值,会触发运行时错误。和你在没有值的普通可选类型后面加一个惊叹号一样。

13. 断言

断言会在运行时判断一个逻辑条件是否为true。从字面意思来说,断言“断言”一个条件是否为真。你可以使用断言来保证在运行其他代码之前,某些重要的条件已经被满足。如果条件判断为true,代码运行会继续进行;如果条件判断为false,代码运行停止,你的应用被终止。

如果你的代码在调试环境下触发了一个断言,比如你在 Xcode 中构建并运行一个应用,你可以清楚地看到不合法的状态发生在哪里并检查断言被触发时你的应用的状态。此外,断言允许你附加一条调试信息。

你可以使用全局assert函数来写一个断言。向assert函数传入一个结果为true或者false的表达式以及一条信息,当表达式为false的时候这条信息会被显示:

let age = -3assert(age>= 0, "A person's age cannot be less than zero")//因为 age < 0,所以断言会触发

当条件可能为假时使用断言,但是最终一定要保证条件为真,这样你的代码才能继续运行。断言的适用情景:

整数类型的下标索引被传入一个自定义下标脚本实现,但是下标索引值可能太小或者太大。

需要给函数传入一个值,但是非法的值可能导致函数不能正常执行。

一个可选值现在是nil,但是后面的代码运行需要一个非nil值。

参考链接:

http://special.csdncms.csdn.net/the-swift-programming-language-in-chinese/Introduction/template/chapter2/01_The_Basics.html

swift java_swift语法和java的比较相关推荐

  1. 【自学elasticsearch7】结合es语法和java的HighLevelClient:索引(映射)创建

    [自学elasticsearch7]结合es语法和java的HighLevelClient:索引(映射)创建 写在开头 开箱即用的elasticsearch 用curl语句在es中创建第一个索引(映射 ...

  2. 【Java知识点整理】MarkDown语法和Java历史

    一.养成写博客的习惯 有助于总结归纳学习的知识.锻炼文笔.训练逻辑思维能力.有助于多思考和总结 1.博客网站 常用的博客网,CSDN--专业的IT博客 2.自己搭建博客网站 需要一些费用,1000多元 ...

  3. js的语法和java相同_js的一些有别于java语法

    请原谅一个js初学者不可避免的把js和java相提并论,并兴奋地发现js很灵活很有动感啊 1.switch可用于字符串: var a = 'abc'; switch(a){ case 1:alert( ...

  4. 正则表达式基本语法和Java中的简单使用

    ​一.正则表达式语法 1.计数符(以下n和m为非负整数,且m>n) *,匹配0次或多次,即{0,}: +,匹配1次或多次,即{1,}: ?,匹配0次或1次,即{0,1}: {n},匹配n次: { ...

  5. 零基础学编程,如何区分C语言和Java?我们到底如何怎么进行选择!

    C语言和 Java的主要区别:面向过程/面向对象.编译型/混合型.不同的应用场景.只要阅读二者的入门资料就清楚了. 时间足够的话,先学C再学Java:时间不够直接上 Java. 一个合格的程序员当然是 ...

  6. Go语言和Java、python等其他语言的对比分析

    一.Go语言设计初衷 1.设计Go语言是为了解决当时Google开发遇到的问题: 大量的C++代码,同时又引入了Java和Python 成千上万的工程师 数以万计行的代码 分布式的编译系统 数百万的服 ...

  7. C语言和Java的区别?

    C语言和 Java的主要区别:面向过程/面向对象.编译型/混合型.不同的应用场景.只要阅读二者的入门资料就清楚了.时间足够的话,先学C再学Java:时间不够直接上 Java.一个合格的程序员当然是要会 ...

  8. R语言构建仿真数据库(sqlite)并使用dplyr语法和SQL语法查询数据库、将dplyr语法查询语句翻译为SQL查询语句

    R语言构建仿真数据库(sqlite)并使用dplyr语法和SQL语法查询数据库.将dplyr语法查询语句翻译为SQL查询语句 目录

  9. html和css之间有什么区别,html语法和css语法之间有什么区别

    区别:HTML由围绕内容的标签组成,例" 内容 ":而CSS由一条或多条声明和选择器组成,每条声明由一个属性和一个值组成,例"div{font-size:12px;}&q ...

最新文章

  1. Windows下编译tensorflow-gpu教程
  2. 洛谷P2158仪仗队(数学,观察找规律,欧拉函数)
  3. Executor家族的辨析
  4. JavaScript享元模式
  5. 上传文件白名单_十大常见web漏洞——文件上传漏洞
  6. 如何改变对话或窗体视窗的背景颜色
  7. C++笔记-断言、静态断言、R转义符
  8. mysql云上迁移_自建mysql 迁移到云上-问答-阿里云开发者社区-阿里云
  9. split函数python 未定义_实现python 的split函数
  10. matlab不用循环,三维矩阵按横切页(垂直于纸面且)向右展开为2维,即(i,j,:)展开。将二维矩阵每行顺序不变依次向左复制,如:(a,b,c)复制为(a,a,a,b,b,b,c,c,c)
  11. python的全局变量和局部变量
  12. 传智播客Java引用和数值类型思考
  13. 获取北京时间 日开始时间戳
  14. STM32的CAN波特率设置方法详解
  15. ISO8601标准时间格式
  16. Flash制作雾效果
  17. Linux第二章:6.Xftp安装教程、使用Xftp进行远程文件传输
  18. 读取数据快慢的设备_目前在以下各种设备中,读取数据快慢的顺序是内存、硬盘、光盘和软盘。...
  19. 5步完成编写Mysql的shell脚本
  20. 蓝鲸作业流程编排--参数使用

热门文章

  1. ubuntukylin ubuntu1304
  2. Oracle dataGuard专题:Rman通过duplicate创建standby
  3. Linux系统如何连接和上传文件到服务器上
  4. cross-env使用 1
  5. Apache Cassandra和Apache Ignite:分布式数据库的明智之选
  6. Atitit.输入法配置说明v1 q229
  7. 智行火车票能否把用户的敏感信息屏蔽?
  8. 并发下,使用redis防止数据重复插入(数据库未对表字段设置唯一情况下)
  9. Linux学习笔记4.4-Linux重定向
  10. 5_Windows下利用批处理切换IP地址