swift语法和java的比较

1. 定义常量和变量html

a. Swift语法编程

常量:swift

let MaxNumber = 10

变量:安全

var name = 1

b. Java语法数据结构

常量:app

public final int MaxNumber= 10;

变量:less

public String name = "morden";

这里要注意的是swift有类型标注(type annotation)这个语法:若是要添加类型标注,须要在常量或者变量名后面加上一个冒号和空格,而后加上类型名称。可是由于swift编译器能够进行类型安全断定,因此通常为了代码简练,函数

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

常量:.net

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.456
let oneMillion = 1_000_000
let justOverOneMillion = 1_000_000.000_000_1

 7. 整数和浮点数转换

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

let three = 3
let pointOneFourOneFiveNine = 0.14159
let 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-255 maxAmplitudeFound 如今是 0

 8. 布尔值

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

Swift:

let flag : Bool = false
        if flag{
            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")
let http200Status = (statusCode: 200, description: "OK")
//能够在定义元组的时候给单个元素命名:// http404Error 的类型是 (Int, String),值是 (404, "Not Found")

能够将一个元组的内容分解(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 = -3
assert(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

相关文章
相关标签/搜索