Apple Swift 编程语言简单入门(上)

WWDC 2014上,苹果介绍了一种新语言Swift,应该将来会替代掉Objective-C,所以现在先学学,为将来做准备。

现在,在iBooks上就可以免费下载到这个的指南:The Swift Programming Language:

本篇文章是我读里面的入门指南章节(The Swift Tour)所做的笔记,包括了摘抄、感想等等。


-----------------------------------------分割线-----------------------------------------

简单的Hello World:

println("Hello, world")

不需要main函数
不需要在每行的结尾加;做为结束(这样还不太适应),加上好像也没事


简单数值类型(Simple Value)

let关键词用来声明常量(constant):

let myConstant = 42
var关键词用来声明变量(variable),跟js挺类似的:
var myVariable = 42
myVariable = 50

跟js类似,对象的类型不需要明确指定,编译器会做判定,但如果需要显式地指定,则这样:
let explicitDouble: Double = 70
这里Double就是类型,用:隔开。
变量类型定了后就不能改变,也就是说,如果赋值其他类型,会报错。

数值不会隐式转换,需要调用转化函数,否则报错。
let label = "The width is "
let width = 94
let widthLabel = label + String(width)
有种更便捷的写法,用\(),沿用上面的变量举例:
let height = 30
let sizeLabel = "The size is \(width * height)"

数组和Dictionary的用法:
var shoppingList = ["catfish", "water"]
shoppingList[1] = "bottle of water"
shoppingList = [] //设为空数组
var occupations = [
    "key1": "value1"
"key2": "value2"
]
occupations["key3"] = "value3"
occupations = [:] //设为空Dictionary
创建空的数组和Dictionary需要用到初始化语法,应该是因为不这样编译器判断不出里面的对象类型:
let emptyArray = String[]()
let emptyDictionary = Dictionary<String, Float>()

-----------------------------------------分割线-----------------------------------------

逻辑控制 (Control Flow)

用if, switch, for-in, for, while, do-while等等,跟C或Objective-C没多少差别,比较特别的是,在for和if后可以不需要括号

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


如果一个对象可能是nil,假定名字叫optionalName,在Swift里碰到这种情况要复杂些,需要用问号(?)来标注对象可能是空的,见下面摘自书上的例子。如果不这样做,直接设置该对象为nil会报错,所以对比OC来说,对象是否nil会更加显式。在if语句里,还可以用let的方式定义临时变量,然后在if的{}内使用,就像for语法里的一样。

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

switch支持任意类型的数据,而不需要只是整数,而且支持比较复杂的判断,不是只能做等价判断,下面为书上的例子,其中一个case就用到了前缀判断。还有,不再需要在每个case后加break了,该case match后执行完就结束,这个赞:

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

for-in语句也可用于Dictionary,见下面摘自书上的例子:

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
        }
    }
}

在for-in里可以用..或...来简洁地指定一个范围,其中..表示不包括上限,而...则包括了。见下面的例子:

// 这里i不需要事先声明
for i in 0..3 {
    firstForLoop += i
}

-----------------------------------------分割线-----------------------------------------

函数和闭包(Functions and Closures)

function的例子见下面摘抄自书上的,它用->来分割参数和返回值,如果返回值是多个数值的话,就用括号包括起来:

func greet(name: String, day: String) -> String {
    return "Hello \(name), today is \(day)."
}
greet("Bob", "Tuesday")
func getGasPrices() -> (Double, Double, Double) {
    return (3.59, 3.69, 3.79)
}
getGasPrices()

跟其他语言类似,函数也是变量,可以赋值给某个变量,或者作为其他方法的参数,具体就不摘抄了。


函数其实就是闭包的一个特殊形式,所以函数可以没有名字。用花括号{}来标识,用in来分割开函数和实现,见下面摘抄自书上的例子:

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

闭包还有不少更简洁的写法,具体书上有。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值