码迷,mamicode.com
首页 > 编程语言 > 详细

Swift语言概览

时间:2015-05-13 23:11:46      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:

变量与常量

  Swift使用var声明变量,let声明常量。

var myVariable = 42
myVariable = 50
let myConstant = 42   //myConstant不能修改

类型推导

 

  Swift支持类型推导(Type Inference),所以上面的代码不需指定类型,如果需要指定类型:

var str: String = "Swift"
var str = "Swift" //自动推断类型为String

 

  Swift的变量一旦声明了,就不能修改类型了,上面的例子中str只能是字符串类型,之后无论如何赋值都不能修改其类型。

  所以我们说类型往往可以省略,但有些地方还是不能省略。特别是在集合类型上面,例如一个本来想放NSObject的字典,因为初始化用的字符串,就被推断成一个完全都是字符串的字典了。

  有一个奇葩的地方,Swift 可以用任意Unicode字符当做变量名,也就是说,中文,图释,都是可以的。

var 中文 = "swift"
var ?? = "haha"

字符串String

注意这里生成的String,并不是NSString。他甚至都不是一个Object,我们可以在定义里面看到:

 

struct String {
    init()
}

String和CFString一样,他是一个Struct! 不过String可以和NSString互相替代,而且API通用。

数组和字典

Swift使用[]操作符声明数组(Array)和字典(Dictionary):

var shoppingList = ["catfish", "water", "tulips", "blue paint"]
shoppingList[1] = "bottle of water"

var occupations = [
    "Malcolm": "Captain",
    "Kaylee": "Mechanic",
]
occupations["Jayne"] = "Public Relations"
// 一般使用初始化器(initializer)语法创建空数组和空字典:
let emptyArray = String[]()
let emptyDictionary = Dictionary<String, Float>()
// 如果类型信息已知,则可以使用[]声明空数组,使用[:]声明空字典。

Array和String一样,也是结构体。不过,Array不具有NSArray的API特性。需要显示转换成NSArray才可以调用其方法。

枚举

  通过循环枚举,即

 

30    while flag {enum(arr)} 
31    for a in arr {} 
32    for var i=1;i<13;++i {} 
33    for i in 1..10 {} 

 

控制流

Swift的条件语句包含ifswitch,循环语句包含for-inforwhiledo-while,循环/判断条件不需要括号,但循环/判断体(body)必需括号:

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

在 if 语句中,条件必须是一个布尔表达式
77    if blablabla { 
78    } 
79    else{ 
80    } 
注意:这里的大括号不可以省略。
 
多路分支
81    switch num 
82    { 
83    case 1: 
84      
85    case 2: 
86      
87    default: 
  }

注意:不再需要写break,且default必须有!且必须所有条件都要覆盖到,一般情况下都会有default,但是若在enum中使用,就可以用case搞定了。

 对于case来说,不仅可以写 case 1, case 2, 还可以写 case 1, 2, 3, 4, 甚至 case, 1, 2, 3, 4, 7..10

可空类型

结合iflet,可以方便的处理可空变量(nullable variable)。对于空值,需要在类型声明后添加?显式标明该类型可空。

var optionalString: String? = "Hello"
optionalString == nil

var optionalName: String? = "John Appleseed"
var gretting = "Hello!"
if let name = optionalName {
    gretting = "Hello, \(name)"
}

? 表示的是:Optional。写法如下:

      var possibleValue: Int? = animalLegs["xiaohaha"] 

1       if possibleValue {

2         println("Notnil")

3       }

4       else {

5         println("111")

6       } 

!的作用就是突破Optional,拿到内部值
62    if possibleValue { 
63      let value = possibleValue! 
64      println("xiaohaha has \(value) legs") 
65    } 
66    else { 
67      println("> <") 
68    } 
 
不过这里,有个简练的写法,更漂亮优雅。
69    if let value = possibleValue 
70    { 
71      println("xiaohaha has \(value) legs") 
72    } 
73    else 
74    { 
75      println("> <") 
76    } 
//如果变量的可选值是 nil,条件会判断为 false,大括号中的代码会被跳过。如果不是 nil,会 将值赋给 let 后面的常量,这样代码块中就可以使用这个值了。 

其他循环

  for-in除了遍历数组也可以用来遍历字典:

let interestingNumbers = [
    "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 interestingNumbers {
    for number in numbers {
        if number > largest {
            largest = number
        }
    }
}
largest

  while循环和do-while循环:

var n = 2
while n < 100 {
    n = n * 2
}
n

var m = 2
do {
    m = m * 2
} while m < 100
m

  Swift支持传统的for循环,此外也可以通过结合..(生成一个区间)和for-in实现同样的逻辑。

var firstForLoop = 0
for i in 0..3 {
    firstForLoop += i
}
firstForLoop

var secondForLoop = 0
for var i = 0; i < 3; ++i {
    secondForLoop += 1
}
secondForLoop

 

Swift语言概览

标签:

原文地址:http://www.cnblogs.com/ShawnLi/p/4501985.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!