首页 > 代码库 > 从Pitre《Swift 基础教程2nd》开始

从Pitre《Swift 基础教程2nd》开始

     看了两天《Learn Objective-C on the MAC》 中文版本《Objective-C基础编程》,大概认真读到了第9章内存管理部分,感觉这语言可比C++简单多了。

      第一天,因为有C语言基础的缘故,我在windows 上安装了GNUstep (Objective-C)开发环境,变看电子书籍,边在PC上编译运行树上的示例,几乎一个都没放过,还做了不少笔记。 (毕竟作者 Mark Dalrymaple & Scott Knaster 是高屋建瓴,叙述技术娓娓道来,将其实很深的技术要点深入浅出地讲出,言简意赅,还将Objc与C语言做对比来说明,印象深刻)。不知不觉就在第一天看完了前8章。

 但是从第9章开始内存管理部分,可没有那么好啃了。

“......我们常常讲这些规则复杂化,同样,忽略这些规则也是一种常犯的错误。如果你正在漫无目的地滥用retain 和release 方法1??修正这些错误,那就说明你还没有真正掌握这些规则。你需要放慢速度,休息一下,然后再继续阅读......“ 在《Objective-C基础编程》中,作者如是说。

看说的多好,欲速则不达。

同时,我在临睡前也翻翻知乎的帖子,查看一下前辈的学习建议和曲线。

个人总结如下:

  1. 如果确定要长期在MAC/IOS下开发,Objective-C & swift 都要学,有了Objc 基础的人千万不要轻视对swift的学习,当然学习C/C++的对Objc/swift 不屑的早晚有后悔的一天。 毕竟语言只是个工具,如果非常熟悉某种语言的话,其实学习objc/swift 的代价会非常小。
  2. 个人在前两天决心入手MAC book前涉猎了一下app store 上的调查,总结出的结论是: 技术在MAC/IOS上不是瓶颈,难得的是想法和创意。所以在确定要开发项目前,先做一些调查,有利可图再继续做下去,不要埋首到技术钻研和无穷尽的编码中,那样太没有趣味了。

看了《Objective-C基础编程》初步对Objc 有了个初步的了解, (条条框框比C++多,但是要比C 多了不少,掌握起来其实有很大难度的)。

但是swift 倒是一门易学易用的语言,在图书馆借到了 Pitre 的《swift 基础教程2nd》,粗略翻了一下,这门语言可跟javascipt 很像呀。 

好了,开始上路。

技术分享

  • Swift 2 是Apple 从头打造的现代语言,功能强大且易于学习。Apple公司已将其作为日益增长的iOS/watchOS/tvOS/Mac OS X 应用程序的开发语言
  • Xcode  目前最新的Xcode 最新版本是Xcode8.3
  • LLVM 在xcode 中,LLVM在幕后工作,这种编译器技术让Swift 语言变得优雅,并将Swift 代码转换为Apple设备处理器能够运行的机器吗
  • REPL (Read-Eval-Print-Loop)是一个命令行工具,可用于快速尝试Swift 代码。在MAC OS X中,可在terminal 中运行它
  • playground 在Xcode中,提供了交互性和实时的结果,非常适合用来学习Swift

边看书边实践边写随笔:

Chapter 1 Swift 简介

1. 在Terminal 中输入xcrun swift 可进入REPL,进行swift代码测试

2. 使用var 定义变量,使用let 定义常量

3. swift 基本类型:

Bool, Int ,Int32,Int64,Int8,Int16, UInt,UInt32,UInt64,UInt8,UInt16,Float,Double,Character,String

4.  数学运算法  加 (+),减 (-),乘 (*),除 (/),各种语言在这点都是一个德性。

5. 数值表示法, 二进制,八进制,16进制,科学计数法,与C同

6. 轻松显示字符串

 使用嵌入表示法\() 来引用变量/常量,如

let  n=10
let  name= “Tom”
let  city=“Shanghai”
print (“I am \(name), from \(city), age=\(n)")

 7. 使用typealias 定义别名,与C中的typedef 同,如

typealias EightBits=UInt8
var reg:EightBits=0

 8.元祖 (Tuple) 元祖是由一个或多个变量/常量/字面量组成的单个实体,如

let myDreamCar=(2017,"Mercedes-Benz","M-Class")
print (myDreamCar.0)
print (myDreamCar.1)
print (myDreamCar.2)

 9. 可选类型, (现在还不明白这个用处是?)

var v: Int?

 Chapter2  集合

1. 数组

let candyJar=["Peppermints", "Gooey Bears","Happy Ranchers"]
print (candyJar[0])
candyJar.append("Candy Canes") //!!! error ,the array is constant

var refillableCandyJar =candyJar //将常量数组赋给变量数组
refillableCandyJar.append("Candy Canes")
refillableCandyJar+=[Peanut Clusgters"];
refillableCandyJar+=["Banna Taffy","Bubble Gum"]

var h20:[String]=["Hydogen","Hydrogen","Oxygen"]; //如果要在声明数组时指定其值的类型

 与C同,数组中包含的元素类型必须相同。

用var 定义的是可变的数组,使用let定义的是常量数组。

swift语言中的数组可以类比为C中的向量 vector。

swift中数组可以修改/替换(指定数组索引并赋给它新值即可),删除(removeAtIndex/removeLast),插入(insert:atIndex),合并(+)

  • 字典

字典包括两个不同的部分:键 (key)和 值 (value),键和值的类型可以不同,但所有键的类型都必须相同,所有值的类型也必须相同。

va r dict =["one":1, "two":2,"three":3,"four":4]
print (dict["one"])  //find

dict["five"]=5 //add

dict["one"]=11 //update

dict["one"]=nil //delete

dict.removeValueForKey("two") //delete
  • 数组的数组

//Todo

//add some codes

  • 创建空数组和词典
var myEmptyArray:Array<Int>=[]
//or
var myEmptyArray=[Int]()
myEmptyArray+=[33,44,66]
myEmptyArray=[]  //delete all items

var myEmptyDictionary =Dictionary<String,Double> ()
myEmptyDictionary =["myKey",12.34]
  •  数组迭代
//method 1
for itemName in list {
... do something with itemName
}

//method 2
//迭代数组的值及其索引
for (index, candy) in combinedRefillableCandyJar.enumerate () {
  print ("Candy \(candy) is in position \(index) of the array")
}

 

  • 迭代词典
for (index, value ) in arceneauxsOtherCandyRoute {
 print ("\(key) has a candy jar with the following contents:\(value)")
}

 swift 基本数据类型学习&介绍完毕

<Chapter 2 end >

 

从Pitre《Swift 基础教程2nd》开始