swift学习笔记之一——初见swift

注:使用xcode6,启用调试bug提示输入密码,可在终端输入DevToolsSecurity -enable 解决
//========================
//2014/7/18 11:06
//========================

1、简单值(值类型同java中的类型对象:String,Double,Float,Int(Integer)…),新增了了两个有用的集合类型 Array和Dictionary
let声明常量,var声明变量。(常量只能赋值一次,例如:圆周率π=3.14是个常量,声明圆周率:let PI = 3.14)

let和var声明的值,不用显式的指定值的类型,编译器会在编译的时候根据值的特征去推断指定的类型值

当然也可以显式指定值的类型,如 let a: Double = 70 var b: Float = 4

值不会隐式转换成其它类型,若要转换成其它类型需要进行强转,如
let label = “the width is”
let width = 95
let widthlabel = label + String(width)

(),可以将括号中的值转换成字符串,在双引号中使用 ,在playground中,输入 var a:String = “(3+5)” + String(6) 将输出 86

数组和字典的定义:

 var array = ["a","b"]
 var dict = ["a":1,"b":2]
 dict["c"] = 3 //新增数据字典项

 定义空数组和字典
 var array = String[]()     var dict = Dictionary<String, T>
 然后根据相关的api函数添加数据项

2、控制流
if、switch做条件控制,for-in、for、while、do-while做循环控制
if

 let scores = [75,43,103,87,12]
 var teamScore = 0
 for score in scores {
      if score > 50 {
           teamScore += 3
      } else {
           teamScore += 1
      }
 }

switch
swift的switch的条件与java不同,swift不限制值的类型,其次是swift的switch运行遇到匹配的就会退出,而java需要手动的使用break退出

 let vegetable = "red pepper"
 switch vegetable {
 case "celery":
      let vegetableComment = "Add some raisins"
 case "cucumber", "watercress"
      let vegetableComment = "That would make a good tea sandwich."
 case let x where x.hasSuffix("papper"):
      let vegetableComment = "Is it a spicy \(x)?"
 default:
      let vegetableComment = "Everything tastes good in soup."
 }

针对数据字典(dictionary)循环遍历 swift提供了特殊的处理方式:在for后面用一组值代替 key-value

 let dict = ["Prime":[2,3,5,7,11,13],"Fibonacci":[1,1,2,3,5,8],"Square":[1,4,9,16,25]]
 var largest = 0
 for (kind, numbers) in dict {
      for number in numbers {
           largest = number
      }
 }
 largest//输出25

while和do-while循环,基本与java的while和do-while类似,除了条件swift不需要括号,而java需要用括号
for循环,有三种写法 1> for i in array 2> for i in 0..10 3> for i = 0; i < 10; ++i (有点类似Oracle的 for..in.. loop)

注:操作符与前后需要有空格,不然编译会不通过

3、函数和闭包
swift的函数使用func声明,使用 “->” 声明函数的返回值类型,这一点在语法上与java的方法有很多的差别,还是很容易理解,还有更特殊的一点,
swift的函数可以返回一组值,如:

 func getGasPrices() -> (Double, Double, Double) {
      return (3.0, 4.0, 5.0)
 }
 getGasPrices()

swift的函数参数和java的方法参数一样,可以使用 …表示该函数有多个参数(几个参数在函数里用数组处理)

 func sumOf(numbers: Int...) -> Int {
      var sum = 0
      for number in numbers {
           sum += number
      }
 }

嵌套函数(在函数体内声明的函数是嵌套函数),嵌套函数可以访问被嵌套函数的变量

 func returnFifteen() -> Int {
      var y = 10
      func add() { //嵌套函数
           y += 5
      }
      add()
      return y
 }

函数是一个很好的类型,这就意味着,函数可以作为其它函数的返回值

 func makeIncrementr() -> (Int -> Int) {
      func addOne(number: Int) -> Int {
           return 1 + number
      }
      return addOne
 }
 var increment = makeIncrementer()
 increment(7)

同理函数也可以作为其它函数的参数

 fucn hasAnyMatches(list: Int[], condition: Int-> Bool) -> Bool {
      for item in list {
           if condition(item) {
                return true
           }
      }
      return false
 }
 func lessThanTen(number: Int) -> Bool {
      return number < 10
 }
 var numbers = [20,19,7,12]
 hasAnyMatches(numbers, lessThanTen)

函数是一种特使的闭包,下面例子是使用函数闭包给numbers的每一项*3倍

 numbers.map({
      (number:Int) -> Int in
      let result = 3 * number
      return result
      })

如果闭包的类型是已知的,则可以隐藏掉参数的类型或者返回值的类型

 numbers.map({
      number in 3 * number })  // 与上面的写法等价

可以使用参数的下标值替代参数的名字,给参数赋值。当一个闭包作为最后一个参数传给一个函数的时候,它可以直接跟在括号后面。

 sort([1,5,3,12,2]){ $0 > $1 }  // 输出 12,5,3,2,1
 sort([1,5,3,12,2]){ $0 < $1 }   //输出 1,2,3,5,12

4、对象和类
对象和类的概念与java相同,但使用方式有很大的区别,java是使用new实例化对象,而swift采取调用类似于函数的方式实例化对象
比如:创建空字符串

 java:  
    String javaStr = new String();
 swift: 
    var swiftString = String()

swift类的初始化函数为 init

 class Shape {
      var type = String()
      init(type:String) {
           self.type = type
      }
 }

还有其它地方 n多区别,待以后慢慢发现

struct 与 class的区别:struct能支持和包含class的各种特征,唯一一个区别的地方是,struct是传值,而class是传引用

附上,中文《The Swift Programming Language》

PS: vmware mac os下 xcode6,老是崩溃,期待正式版快快出来。

你可能感兴趣的:(java,swift)