您的位置:首页 > 移动开发 > Swift

swift学习总结一

2014-06-03 17:04 239 查看
就在今天凌晨,苹果公司发布了新的语言:Swift。这里写一下个人的一下小总结,希望可以帮助大家做一个简洁一点儿的归纳总结,当然,这里列举的并不全面,学习更全面的知识还是看开发文档会更好。1.使用 let 来定义常量, var 定义变量。2.如果初始化值没有提供足够的信息(或没有初始化值),可以在变量名后写类型,以冒号分隔。eg:
let explicitDouble: Double = 70
3.如果你需要转换一个值到不同类型,需要明确的构造一个所需类型的实例。eg:let label = "The width is "
let width = 94
let widthLabel = label + String(width)
4.There’s an even simpler way to include values in strings: Write the value in parentheses, and write a backslash (\) before the parentheses. For example:
let apples = 3
let oranges = 5
let appleSummary = "I have \(apples) apples."
let fruitSummary = "I have \(apples + oranges) pieces of fruit.”
5.创建一个数组和字典使用方括号 "[]" ,访问其元素则是通过方括号中的索引或键。
6.你可以一起使用 if 和 let 来防止值的丢失。这些值是可选的。可选值可以包含一个值或包含一个 nil 来指定值还不存在。写一个问号 "?" 在类型后表示值是可选的。
7.可使用 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
        }
    }
}
8.你可以在循环中保持一个索引,通过 ".." 来表示索引范围或明确声明一个初始值、条件、增量。这两个循环做相同的事情:
var firstForLoop = 0
for i in 0..3 {
    firstForLoop += i
}
firstForLoop

var secondForLoop = 0
for var i = 0; i < 3; ++i {
    secondForLoop += 1
}
secondForLoop
使用 .. 构造范围忽略最高值,而用 ... 构造的范围则包含两个值。9.使用 func 声明一个函数。调用函数使用他的名字加上小括号中的参数列表。使用 -> 分隔参数的名字和返回值类型。
func greet(name: String, day: String) -> String {
    return "Hello \(name), today is \(day)."
}
greet("Bob", "Tuesday")
使用元组(tuple)来返回多个值。
func getGasPrices() -> (Double, Double, Double) {    return (3.59, 3.69, 3.79)}getGasPrices()
函数可以接受可变参数个数,收集到一个数组中。
func sumOf(numbers: Int...) -> Int {    var sum = 0    for number in numbers {        sum += number    }    return sum}sumOf()sumOf(42, 597, 12)
10.函数可以返回函数,函数也可以作为参数传到另一个函数里:
函数是第一类型的。这意味着函数可以返回另一个函数。func makeIncrementer() -> (Int -> Int) {    func addOne(number: Int) -> Int {        return 1 + number    }    return addOne}var increment = makeIncrementer()increment(7)
一个函数可以接受其他函数作为参数。
func 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)
11.闭包。对于闭包,我想我还并不怎么理解它的实际用途,暂时欠缺,以后补上。
12.关于类和对象:
类和对象与我们常见的并无多大区别,里面一样包含变量、常亮。方法等。
class Shape {    var numberOfSides = 0    func simpleDescription() -> String {        return "A shape with \(numberOfSides) sides."    }}
在调用或者是new出一个对象时:
var shape = Shape()
很简单的一个书写。
方法调用和赋值等:
shape.numberOfSides = 7var shapeDescription = shape.simpleDescription()
个人感觉swift还是有很多是在借鉴C++的,所以对于有C++基础的同学,会更好上手。
13.这个版本的 Shape 类有些重要的东西不在:一个构造器来在创建实例时设置类。使用 init 来创建一个。class NamedShape {    var numberOfSides: Int = 0    var name: String    init(name: String) {        self.name = name    }   //by gashero    func simpleDescription() -> String {        return "A Shape with \(numberOfSides) sides."    }}
注意 self 用来区分 name 属性和 name 参数。构造器的生命跟函数一样,除了会创建类的实例。每个属性都需要赋值,无论在声明里还是在构造器里。使用 deinit 来创建一个析构器,来执行对象销毁时的清理工作。子类包括其超类的名字,以冒号分隔。在继承标准根类时无需声明,所以你可以忽略超类。子类的方法可以通过标记 override 重载超类中的实现,而没有 override 的会被编译器看作是错误。编译器也会检查那些没有被重载的方法。
class Square: NamedShape {    var sideLength: Double    init(sideLength: Double, name: String) {        self.sideLength = sideLength        super.init(name: name)        numberOfSides = 4    }    func area() -> Double {        return sideLength * sideLength    }    override func simpleDescription() -> String {        return "A square with sides of length \(sideLength)."    }}let test = Square(sideLength: 5.2, name: "my test square")test.area()test.simpleDescription()
有过C++编程经验的同学,相信这里是可以很直观看出来的。
14.属性可以有 getter 和 setter 。class EquilateralTriangle: NamedShape {    var sideLength: Double = 0.0    init(sideLength: Double, name: String) {        self.sideLength = sideLength        super.init(name: name)        numberOfSides = 3    }    var perimeter: Double {    get {        return 3.0 * sideLength    }    set {        sideLength = newValue / 3.0    }    }    override func simpleDescription() -> String {        return "An equilateral triangle with sides of length \(sideLength)."    }}var triangle = EquilateralTriangle(sideLength: 3.1, name: "a triangle")triangle.perimetertriangle.perimeter = 9.9triangle.sideLength
实在是C++各种分隔啊。
15.使用 struct 创建结构体。结构体支持多个与类相同的行为,包括方法和构造器。一大重要的区别是代码之间的传递总是用拷贝(值传递),而类则是传递引用。struct Card {    var rank: Rank    var suit: Suit    func simpleDescription() -> String {        return "The \(rank.simpleDescription()) of \        (suit.simpleDescription())"    }}let threeOfSpades = Card(rank: .Three, suit: .Spades)let threeOfSpadesDescription = threeOfSpades.simpleDescription()
这里看到的,更多的是C和C++的结合了。在C里面,结构体是一个用途广泛的结构体,相信在swift里面,结构体应该会有一个很有重要的地位,尽管有类。就像我们在编写C++一样,有类我们也还是会经常使用结构体。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: