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++一样,有类我们也还是会经常使用结构体。
相关文章推荐
- iOS: 学习笔记, Swift与Objective-C混用总结
- 奔五的人学IOS:swift练手与csdn,近期学习总结
- iOS Swift4项目EFarm学习和总结
- Openstack Swift 学习总结(一)
- swift学习笔记(六)——基础语法的总结
- Swift的学习总结
- Swift学习总结
- SWIFT学习总结-----1
- Swift基础语法学习总结
- 学习swift问题总结
- Swift语言学习总结——控制语句
- Swift学习总结(个人总结,以方便理解为主)
- Swift教程_通过改造官方Sample学习Swift(九)_总结
- Swift高级语法学习总结(转)
- swift学习一月总结
- Swift学习总结
- 奔五的人学IOS:swift练手与csdn,最近学习总结
- Swift基础语法学习总结一
- Swift高级语法学习总结
- Swift基础语法学习总结二