当先锋百科网

首页 1 2 3 4 5 6 7

基础部分对比

1、结束符:Java中需要定义结束符,在每个语句结束后需要加分号(;)隔开,在Swift中则不需要定义结束符。

2、注释:

单行注释:Java和Swift都用//表示

//这是单行注释

多行注释:Java和Swift都用表示

/*
这是多行注释的第一行
这是多行注释的第二行
*/

Java的文档注释可以嵌套单行注释,但不能嵌套多行注释,也不能嵌套文档注释

/*这是文档注释
*文档注释一
*文档注释二
*文档注释三
*/

Swift的多行注释可以嵌套在多行注释中

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

3、变量:Java中用具体数据类型直接声明变量,而Swift中用var声明变量,具体的数据类型可以指定,也可以不指定,不指定时编译器会自行识别,遇到编译器无法判断的情况则需要显式指定。

Int a = 1;  //Java中定义一个名为a,类型为Int,初始值为1的变量
var a = 1     //Swift中定义一个名为a,值为1的变量,编译器自动识别数据类型为Int
var a: Int = 1      //显式指定a的数据类型为Int

4、常量:Java中声明常量用final关键字加具体数据类型,Swift中用let声明常量,与变量相似,具体的数据类型可以不指定。

final Int b = 2;     //Java中定义一个名为b,类型为Int,值为2的常量
let b = 2    //Swift中定义一个名为b,值为1的常量,编译器自动识别数据类型为Int
let b: Int = 2    //显式指定b的数据类型为Int

类(class)和结构体(struct)对比

定义

Java中以类为主,没有结构体的概念,Swift中类和结构体都有,但结构体是值类型,类是引用类型。

class Dog {     //定义一个名为Dog的类
Int age;           // Dog类里有类型为Int的age属性
String name;       // Dog类里有类型为String的name属性
}
class Car {                   // 定义一个名为Car的类
var color: String = "black"   // 类中有类型为String的color属性,默认值为black
var brand: String = "BMW"     // 类中有类型为String的brand属性,默认值为BMW
}

struct Cat {                   // 定义一个名为Cat的结构体
var age: Int = 1   // 结构体中有类型为Int的age属性,默认值为1
var name: String = "cute"     // 结构体中有类型为String的name属性,默认值为cute
}

创建实例

Java中用new关键字来创建类的实例,语法如下:

类名 对象名 = new 类名()

// 创建上述示例中Dog类的实例
Dog myDog = new Dog()

Swift中创建实例不需要new关键字,语法如下:

let myCar = Car()   // 创建上述示例中Car类的实例
let myCat = Cat()   // 创建上述示例中Cat结构体的实例

optional

Optional 用于表示该对象可能为空的情况,Swift中用?表示该对象是optional,当有值时返回该值,没有值时返回nil。

Java的optional是一个类,且在Java8时才引入,在此之前,如果定义了某个对象,但是后续该对象为空,会出现报错。引入optional后,可以减少很多关于对象是否为空的判断。Java的optional可以保存类型T的值,也可以保存null。

Swift创建optional对象

var a: Int?    // 创建一个名为a,类型为Int?的变量,a可以是任何Int类型的值,也可以为空

Java可以调用类方法来创建optional对象

  • Optional.ofNullable方法:类似swift中的optional,对象可以有值也可以为空
// 创建一个名为a,类型为String的对象
Optional<String> a = Optional.ofNullable(“value”);     // 当a有值时
Optional<String> b = Optional.ofNullable(null);        // 当a为空时
  • Optional.of方法:返回一个值一定不为null的optional
Optional<String> c = Optional.ofNullable(“value”);    // 如果a为null会报错
  • Optional.empty方法:返回一个空的optional
Optional<String> d = Optional.ofNullable(null);      // 如果a有值会报错

此外,Optional.isPresent 方法可以用来判断上述创建的对象的值是否为空

System.out.println(a.isPresent)
System.out.println(b.isPresent)
System.out.println(c.isPresent)
System.out.println(d.isPresent)

// 输出结果依次为 true,false,true,false

访问控制修饰符

Java访问权限修饰符

  • public:对所有类可见,用于修饰类、接口、变量、方法。
  • protected:对同一包内的类和所有子类可见,用于修饰对象、变量、方法,不能用于修饰类。
  • default:在同一个包内可见,可用于修饰类、接口、变量、方法。(什么都不写的情况下默认修饰符)
  • private:在同一类内可见,可用于修饰变量、方法,不能用于修饰类。

Swift访问权限修饰符

  • public:可以访问自己模块中源文件里的任何实体,别人也可以通过引入该模块来访问源文件里的所有实体。
  • internal:可以访问自己模块中源文件里的任何实体,但是别人不能访问该模块中源文件里的实体。(什么都不写的情况下默认修饰符)
  • fileprivate:文件内私有,只能在当前源文件中使用。
  • private:只能在类中访问,离开了这个类或者结构体的作用域外面就无法访问。