2016年11月18日 星期五 晚
11月的集寧,相對(duì)于來(lái)大學(xué)的以往兩年反倒給人一些暖意,但畢竟是晚上,天氣預(yù)報(bào)的降溫也漸漸的若隱若現(xiàn)了,集寧的冬天終于要來(lái)了。想想大三正在經(jīng)歷過(guò)的集寧,突然覺(jué)得有些懷念,暖暖的集寧竟給人一絲可愛(ài)的留念的味道,貌似之前寒風(fēng)刺骨的感覺(jué)沒(méi)有那么的強(qiáng)烈,那么的“可怕”了。每次從教室到食堂再到宿舍的三點(diǎn)一線途中,總有種被集寧的大風(fēng)吹成“傻狗”的感覺(jué),然而今年,卻對(duì)她的看法發(fā)生了改變。我想,我是愛(ài)她的,而她,也是愛(ài)我們的。
現(xiàn)在的我正坐在電腦前寫(xiě)著我的swift實(shí)訓(xùn)心得。想想,這是大三第一學(xué)期第一次實(shí)訓(xùn)的第5天,準(zhǔn)確來(lái)說(shuō)是第4天,因?yàn)榈?天的時(shí)候,學(xué)校和藍(lán)鷗進(jìn)行了“共建專(zhuān)業(yè)開(kāi)班典禮”,作為藍(lán)鷗派來(lái)的老師,鋒哥大概的給我們介紹了關(guān)于他們公司的一些內(nèi)容以及現(xiàn)在各個(gè)語(yǔ)言的發(fā)展情況等,所以實(shí)訓(xùn)是從周二才開(kāi)始的。隨著這五天的相處,感覺(jué)鋒哥講課比較快,同學(xué)們很多有些跟不上,而且原來(lái)學(xué)的也都忘的差不多了,后來(lái)才知道鋒哥在他公司是直接帶人做項(xiàng)目的,所以光講重點(diǎn)的部分,自然講的也快。雖然鋒哥講課快,但說(shuō)實(shí)話其實(shí)鋒哥是個(gè)很牛X的人,上課帶我們打代碼也很快,講各個(gè)重要的知識(shí)點(diǎn),控件的屬性、方法時(shí)也都特別仔細(xì),概念大家不懂的時(shí)候他也會(huì)舉通俗的??,盡量讓大家聽(tīng)懂,還讓我們下一些與專(zhuān)業(yè)方面相關(guān)的APP、網(wǎng)頁(yè)那些讓我們課下自己進(jìn)行學(xué)習(xí),感覺(jué)他很盡責(zé),也很努力的讓我們多去學(xué)一些東西。話不多說(shuō),給峰哥個(gè)6,希望他能一直陪著我們學(xué)習(xí)。
這次實(shí)訓(xùn)主要是以swift3.0相關(guān)的內(nèi)容展開(kāi)的,雖然大二的時(shí)候?qū)wift課程進(jìn)行過(guò)簡(jiǎn)單、系統(tǒng)性的學(xué)習(xí),但當(dāng)時(shí)我們所學(xué)習(xí)的是swift2.0的內(nèi)容,還有一點(diǎn):大家經(jīng)過(guò)一年的其他科目的學(xué)習(xí),對(duì)swift的基本語(yǔ)法已經(jīng)模糊了,更何況是改進(jìn)過(guò)的新內(nèi)容。所以這次的實(shí)訓(xùn)可謂是又從零開(kāi)始的學(xué)習(xí)。但相比之前,同學(xué)們的積極性也有所提高,每個(gè)人都有想學(xué)習(xí)的欲望,并且都希望可以學(xué)會(huì)。而且這次的實(shí)訓(xùn)較之前的時(shí)間較長(zhǎng),完全可以從什么都不會(huì)開(kāi)始學(xué)習(xí),課下也有好多時(shí)間可以進(jìn)行練習(xí),對(duì)代碼進(jìn)行學(xué)習(xí)記憶,總之課程的安排相對(duì)還是比較合理的。
下面,我就對(duì)近幾天實(shí)訓(xùn)的內(nèi)容進(jìn)行總結(jié),其中包括一些重點(diǎn),非重點(diǎn),如果內(nèi)容不夠嚴(yán)密、不夠好,希望不要噴。
day01
定義常量、變量
//自動(dòng)類(lèi)型推斷 var 定義變量
var str = "Hello, playground"
//let 定義常量(不能修改的量)
var name = "Hello, plyground"
基本數(shù)據(jù)類(lèi)型
- 字符、整型、浮點(diǎn)型、雙精度浮點(diǎn)型
//數(shù)據(jù)類(lèi)型
//1??字符
let gender : Character = "M"
//2??整型
let age :Int = 12
//3??浮點(diǎn)型
let height : Float = 12.2
//4??雙精度浮點(diǎn)型
let height1 : Double = 12.222
- 字符串
//5??字符串
let name1 : String = "Lanou"
//長(zhǎng)度
let length = name.characters.count
//拼接
let name2 = name + "pinjie"
var name3 = name + "\(name1)"
//插入
//獲取第幾個(gè)位置
let index = name3.index(name3.startIndex,offsetBy:5)
//插入上面獲取的位置
name3.insert(contentsOf: "charu".characters/*字符集合*/, at: index)
name3.insert("a", at: name3.startIndex)/*一個(gè)字符*/
//遍歷
for item in name3.characters {
}
//切割
var school = "Jiningshifan"
let index1 = school.index(school.startIndex, offsetBy:2)
let newSchool = school.substring(to: index1)
print(newSchool)
- 數(shù)組
//6??數(shù)組
//array
var arr = [1,2,3]
var arr1 : [Int] = [Int]()
//遍歷
for (index, item) in arr.enumerated(){
print(item)
}
//增加元素
arr1.append(2)
//刪除元素
let a = arr1.remove(at: 0)
//更新元素(把第二個(gè)元素?fù)Q成22)
arr[1] = 22
print(arr)
//練習(xí)題
var names = ["zhang", "li", "wang", "zhao"]
//index 索引 item 獲取的值
for(index,item) in names.enumerated(){
print("index = \(index), item = \(item)")
print("index = \\(), item = \(item)")//"\"轉(zhuǎn)義字符
}
for i in 1...10 {
print(i)
}
- 字典
//7??字典
var dic : [Int: Int] = [1:1, 2:2]
var dic1 : [Int : Int] = [Int : Int]() //空字典
//添加 更新
dic[1] = 2 //更新
dic[3] = 3 //添加
//刪除
dic.removeValue(forKey: 1)
print(dic)
//遍歷
for item in dic.keys {
print(dic[item]!)
}
- Range
//Range
let student = "yang"
let startIndex = student.index(student.startIndex, offsetBy: 2)
let endIndex = student.index(student.endIndex, offsetBy: -2)
let range = startIndex..<endIndex
student.substring(with: range)
冒泡法
//冒泡(排序算法)
var arr = [2,45,16,8,20]
for i in 0..<arr.count - 1 { //循環(huán)多少輪
for j in 0..<(arr.count - i - 1) { //比較多少次
//比較換位置
if (arr[j] > arr[j+1]) {
var temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
}
}
}
print(arr)
二叉樹(shù)的層級(jí)遍歷
//二叉樹(shù)的層級(jí)遍歷
class Node : NSObject {
var data : Int!
var leftChild : Node?
var rightChild : Node?
}
var node1 : Node = Node()
node1.data = 4
var node2 : Node = Node()
node2.data = 5
var node3 : Node = Node()
node3.data = 6
var node4 : Node = Node()
node4.data = 7
var node5 : Node = Node()
node5.data = 2
node5.leftChild = node1
node5.rightChild = node2
var node6 : Node = Node()
node6.data = 3
node6.leftChild = node3
node6.rightChild = node4
//根節(jié)點(diǎn)
var node7 = Node()
node7.data = 1
node7.leftChild = node5
node7.rightChild = node6
func readData(node : Node){
var arr = [Node]() //定義數(shù)組
arr.append(node) //根節(jié)點(diǎn)裝進(jìn)數(shù)組
while arr.count > 0 {
let temp = arr[0]
if let _ = temp.leftChild { //可選綁定
arr.append(temp.leftChild!) //左孩子裝進(jìn)數(shù)組
}
if let _ = temp.rightChild {
arr.append(temp.rightChild!)
}
//先打印再刪除
print(temp.data)
arr.remove(at: 0) //讀取完第一個(gè)元素的時(shí)候刪除
}
}
readData(node: node7)
函數(shù)
//函數(shù)
//1?? 無(wú)參數(shù)無(wú)返回值
func fun1() {
print("無(wú)參數(shù)無(wú)返回值")
}
fun1()
//2?? 無(wú)參數(shù)有返回值
func fun2() -> Int{
print("無(wú)參數(shù)有返回值")
return 0
}
//3?? 有參數(shù)有返回值
func func3(parm: Int) -> Int {
print("有參數(shù)有返回值")
return 0
}
//4?? 有參數(shù)無(wú)返回值
func func4(parm: Int) {
print("有參數(shù)無(wú)返回值")
}
//5?? 不定參數(shù)
func func5 (parm : Int...) {
var result : Int = 0
for i in parm {
result+=i
}
print(result)
}
//連加
func5(parm: 1,2,3,4)
//inout相當(dāng)于指針
func func6 (a :inout Int, b :inout Int) {
let temp = a
a = b
b = temp
}
var a = 10
var b = 20
func6(a: &a, b: &b)
print("a = \(a) b = \(b)")
day02
重寫(xiě)父類(lèi)(并進(jìn)行初始化)
class Student : NSObject {
var name : String?
var age : Int?
var gender : Bool?
//override重寫(xiě)父類(lèi)
override init() { //初始化方法
print("創(chuàng)造了一個(gè)學(xué)生對(duì)象")
}
init(age : Int, gender : Bool, name : String) {
super.init()
self.age = age
self.gender = gender
self.name = name
}
//析構(gòu)函數(shù)(放到類(lèi)里邊)
deinit {
print("對(duì)象釋放")
}
}
var stu : Student = Student(age:13, gender:false, name:"xiaoming")
print("name = \(stu.name) age = \(stu.age) gender = \(stu.gender)")
類(lèi)與結(jié)構(gòu)體的區(qū)別
- 類(lèi)
//類(lèi)
class Person : NSObject {
//存儲(chǔ)屬性
var name : String?
var age : Int?
//計(jì)算屬性
var fathersAge : Int {
set {
//newValue是默認(rèn)值
self.age = newValue - 20
}
get {
return self.age! + 20
}
}
//lazy屬性
lazy var st : Student = Student()
//函數(shù)
//方法調(diào)用
func eat() {
print("吃飯")
}
//類(lèi)名調(diào)用(類(lèi)函數(shù))
class func happy() {
print("happy")
}
//靜態(tài)不可繼承
static func study() {
print("學(xué)習(xí)")
}
//類(lèi)屬性
static var fatherName : String?
}
var p : Person = Person()
print(p.st)
- 結(jié)構(gòu)體
//結(jié)構(gòu)體
//1.結(jié)構(gòu)體不能繼承
//2.結(jié)構(gòu)體是值類(lèi)型,類(lèi)是引用類(lèi)型
struct Dog {
var name : String?
}
var dog : Dog = Dog()
p.name = "zhangsan"
dog.name = "wangcai"
var p1 = p
var dog1 = dog
p1.name = "lisi"
dog1.name = "dahuang"
print("p.name = \(p.name) dog.name = \(dog.name)")
枚舉
//枚舉
enum Season : String {
case Spring = "春天"
case Summer = "夏天"
case Autumn = "秋天"
case Winter = "冬天"
//case a,b,c
}
print(Season.Autumn.rawValue)
let season = Season.Spring
//遍歷
//switch .. case 必須包含所有的情況,否則使用default
switch season {
case .Spring :
print("1")
fallthrough //貫穿(??)
case .Summer :
print("2")
case .Autumn :
print("3")
case .Winter :
print("4")
}
let a = 10
switch a {
case 1...20 :
print("包含10")
case 2...30 :
print("包含10")
default:
print("")
}
協(xié)議
//協(xié)議
//定義一個(gè)協(xié)議
protocol PersonProtocol {
func study()
}
//可選協(xié)議
@objc protocol StudentProtocol {
@objc optional func happy()
var name : String{set get}
}
class Person: NSObject, StudentProtocol, PersonProtocol {
var newName : String?
var name : String {
set{
self.newName = newValue
}
get{
return self.newName!
}
}
func study() {
}
}
var p : Person = Person()
p.study()
p.name = "zhangsan"
print("p.name = \(p.name)")
- 練習(xí)題(1)
//練習(xí)題
//求圖形的面積及周長(zhǎng)(用協(xié)議)
//面向協(xié)議編程(面向?qū)ο蟮囊环N)
protocol Shape {
func Area() -> Float
func Perimeter() -> Float
}
//三角形
class Triangle : NSObject, Shape {
var height : Float!
var long : Float!
func Area() -> Float {
return height * long / 2.0
}
func Perimeter() -> Float {
return long * 3
}
}
//正方形
class Square : NSObject, Shape {
var length : Float!
func Area() -> Float {
return length * length
}
func Perimeter() -> Float {
return length * 4
}
}
///圓形
class Circle : NSObject, Shape {
var radius : Float!
func Area() -> Float {
return radius * radius * 3.14
}
func Perimeter() -> Float {
return 3.14 * 2 * radius
}
}
var triangle : Triangle = Triangle()
triangle.height = 2.5
triangle.long = 3.0
print("長(zhǎng)方形的面積長(zhǎng)為:",triangle.Area())
print("長(zhǎng)方形的周長(zhǎng)為:",triangle.Perimeter())
var square : Square = Square()
square.length = 4.0
print("正方形的面積長(zhǎng)為:",square.Area())
print("正方形的周長(zhǎng)為:",square.Perimeter())
var circle : Circle = Circle()
circle.radius = 2.25
print("圓形的面積長(zhǎng)為:",circle.Area())
print("圓形的周長(zhǎng)為:",circle.Perimeter())
- 練習(xí)題(2)
protocol GirlProtocol {
func payTheBill()
func happy()
}
//delegate
class Girl : NSObject {
//保存代理值
var delegate : GirlProtocol?
//
func shopBigin() {
if let _ = delegate {
delegate?.happy()
}
}
//購(gòu)物完畢
func shopOver() {
if let _ = delegate {
self.delegate?.payTheBill()
}
}
}
class Boy : NSObject, GirlProtocol {
func payTheBill() {
//實(shí)現(xiàn)協(xié)議
print("買(mǎi)單")
}
func happy() {
print("??")
}
//打游戲
func playGames() {
print("打游戲")
}
}
let boy : Boy = Boy()
let girl : Girl = Girl()
girl.delegate = boy
girl.shopOver()
girl.shopBigin()
- 練習(xí)題(3)
//協(xié)議
protocol FileProtocol {
//開(kāi)始
func Start()
//下載過(guò)程中
func downProcess()
//結(jié)束
func End()
//發(fā)生錯(cuò)誤
func Error()
}
//文件類(lèi)
class File : NSObject {
//保存代理值
var delegate1 : FileProtocol?
//文件管理
func fileManage() {
//開(kāi)始
if let _ = delegate1 {
delegate1?.Start()
}
//下載過(guò)程中
if let _ = delegate1 {
delegate1?.downProcess()
}
//結(jié)束
if let _ = delegate1 {
delegate1?.End()
}
//發(fā)生錯(cuò)誤
if let _ = delegate1 {
delegate1?.Error()
}
}
}
//處理文件類(lèi)
class handleFile : NSObject, FileProtocol {
//把四種狀態(tài)傳過(guò)來(lái)
//開(kāi)始
func Start() {
print("開(kāi)始")
}
//下載過(guò)程中
func downProcess() {
print("下載過(guò)程中")
}
//結(jié)束
func End() {
print("結(jié)束")
}
//發(fā)生錯(cuò)誤
func Error() {
print("發(fā)生錯(cuò)誤")
}
}
let file : File = File()
let handlefile : handleFile = handleFile()
file.delegate1 = handlefile
file.fileManage()
day03
泛型
//泛型
//打印數(shù)字 打印字符串 打印字符
func myPrintNumber(parm:Int) {
print(parm)
}
func myPrintString(parm:String) {
print(parm)
}
func myPrintCharacter(parm:Character) {
print(parm)
}
//泛型只寫(xiě)一個(gè)
func myPrint<T:Collection>(parm:T) {
print(parm)
}
let a = [1,2,3]
myPrint(parm: a)
冒泡排序法
func sort(num : Int, num1 : Int) -> Bool {
//if num >num1 true 否則 false
return num > num1 ? true : false
}
//定義一個(gè)變量 把sort賦值給變量
let fun : (Int,Int) -> Bool = sort
//使用變量調(diào)用函數(shù)
let result = fun(1,2)
print(result)
//冒泡排序法
var arr = [1,3,6,9,12]
func sortArr(parm:(Int,Int) -> Bool) {
for i in 0..<arr.count - 1 {
for j in 0..<arr.count - 1 - i {
if (parm(arr[j], arr[j+1])) {
let temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
}
}
}
}
sortArr(parm: sort)
print(arr)
func sort1(num: Int, num1: Int) -> Bool {
return num < num1 ? true : false
}
//調(diào)用
sortArr(parm: sort1)
print(arr)
閉包
//閉包
let block = { (a : Int, b : Int) -> Bool in
return a > b ? true : false
}
sortArr(parm: block)
let upSort : (Int, Int) -> Bool = {
return $0 > $1
}
let downSort : (Int, Int) -> Bool = {
return $0 < $1
}
sortArr(parm: upSort)
sortArr(parm: downSort)
print(arr)
day04
UIView
- 在ViewController.swift中super.viewDidLoad()下鍵入:
//獲取當(dāng)前控制器view,設(shè)置背景顏色為紅色
//self.view.backgroundColor = UIColor.red
//初始化
let rect = CGRect(x: 30, y: 30, width: 100, height: 200)
let subView : UIView = UIView(frame: rect)
//添加到父視圖上
subView.backgroundColor = UIColor.red
self.view.addSubview(subView)
let subView1 = UIView()
subView1.frame = CGRect(x: 140, y: 140, width: 100, height: 100)
subView1.backgroundColor = UIColor.blue
self.view.addSubview(subView1)
let subView2 = UIView()
subView2.frame = CGRect(x: 40, y: 40, width: 30, height: 30)
subView2.backgroundColor = UIColor.green
subView.addSubview(subView2)
//frame 相對(duì)于父視圖的
//bounds 相對(duì)于自身的坐標(biāo)
print(subView1.bounds)
//center
let subView3 = UIView()
self.view.addSubview(subView3)
subView3.frame = CGRect(origin: self.view.center, size: CGSize(width: 100, height: 100))
subView3.backgroundColor = #colorLiteral(red: 0.9098039269, green: 0.4784313738, blue: 0.6431372762, alpha: 1)
//透明度
//subView3.alpha = 0.1 //這種會(huì)影響子視圖
subView3.backgroundColor = UIColor(colorLiteralRed: 0.5, green: 0.5, blue: 0.5, alpha: 0.5) //三原色修改透明度
let subView4 = UIView(frame: CGRect(x: 10, y: 10, width: 40, height: 40))
subView4.backgroundColor = #colorLiteral(red: 0.2745098174, green: 0.4862745106, blue: 0.1411764771, alpha: 1)
subView3.addSubview(subView4)
//tag 使用2000以上的
subView4.tag = 10001 //10000以上
//subView4.isHidden = true //隱藏
let tagView = subView3.viewWithTag(10001)
print("subView4 = \(subView4),Tag = \(tagView)")
//用戶(hù)交互??
//self.view.isUserInteractionEnabled = false
//self.view.isUserInteractionEnabled = true //打開(kāi)
//superView
print("superView = \(subView4.superview),subView3 = \(subView3)")
//子視圖
for item in self.view.subviews {
//從父視圖上移除
item.removeFromSuperview()
}
//程序啟動(dòng)
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//初始化window
let frame = UIScreen.main.bounds
self.window = UIWindow(frame: frame)
//初始化控制器
let myVC = MyViewController()
//設(shè)置成window的根視圖控制器
self.window?.rootViewController = myVC
//把window設(shè)置成系統(tǒng)的主window
self.window?.makeKeyAndVisible()
return true
}
- 在ViewController類(lèi)中鍵入:
//開(kāi)始點(diǎn)擊
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print("點(diǎn)擊了當(dāng)前的控制器")
}
command+n新建一個(gè)Cocoa Touch Class,名為:MyViewController,將ViewController改為自己新建的MyViewController;
在AppDelegate.swift中AppDelegate類(lèi)中鍵入:
//程序啟動(dòng)
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//初始化window
let frame = UIScreen.main.bounds
self.window = UIWindow(frame: frame)
//初始化控制器
let myVC = MyViewController()
//設(shè)置成window的根視圖控制器
self.window?.rootViewController = myVC
//把window設(shè)置成系統(tǒng)的主window
self.window?.makeKeyAndVisible()
return true
}
- 在MyViewController.swift中viewDidLoad()事件下鍵入:
self.view.backgroundColor = #colorLiteral(red: 0.9098039269, green: 0.4784313738, blue: 0.6431372762, alpha: 1)
- 運(yùn)行結(jié)果:
day01
定義常量、變量
//自動(dòng)類(lèi)型推斷 var 定義變量
var str = "Hello, playground"
//let 定義常量(不能修改的量)
var name = "Hello, plyground"
基本數(shù)據(jù)類(lèi)型
- 字符、整型、浮點(diǎn)型、雙精度浮點(diǎn)型
//數(shù)據(jù)類(lèi)型
//1??字符
let gender : Character = "M"
//2??整型
let age :Int = 12
//3??浮點(diǎn)型
let height : Float = 12.2
//4??雙精度浮點(diǎn)型
let height1 : Double = 12.222
- 字符串
//5??字符串
let name1 : String = "Lanou"
//長(zhǎng)度
let length = name.characters.count
//拼接
let name2 = name + "pinjie"
var name3 = name + "\(name1)"
//插入
//獲取第幾個(gè)位置
let index = name3.index(name3.startIndex,offsetBy:5)
//插入上面獲取的位置
name3.insert(contentsOf: "charu".characters/*字符集合*/, at: index)
name3.insert("a", at: name3.startIndex)/*一個(gè)字符*/
//遍歷
for item in name3.characters {
}
//切割
var school = "Jiningshifan"
let index1 = school.index(school.startIndex, offsetBy:2)
let newSchool = school.substring(to: index1)
print(newSchool)
- 數(shù)組
//6??數(shù)組
//array
var arr = [1,2,3]
var arr1 : [Int] = [Int]()
//遍歷
for (index, item) in arr.enumerated(){
print(item)
}
//增加元素
arr1.append(2)
//刪除元素
let a = arr1.remove(at: 0)
//更新元素(把第二個(gè)元素?fù)Q成22)
arr[1] = 22
print(arr)
//練習(xí)題
var names = ["zhang", "li", "wang", "zhao"]
//index 索引 item 獲取的值
for(index,item) in names.enumerated(){
print("index = \(index), item = \(item)")
print("index = \\(), item = \(item)")//"\"轉(zhuǎn)義字符
}
for i in 1...10 {
print(i)
}
- 字典
//7??字典
var dic : [Int: Int] = [1:1, 2:2]
var dic1 : [Int : Int] = [Int : Int]() //空字典
//添加 更新
dic[1] = 2 //更新
dic[3] = 3 //添加
//刪除
dic.removeValue(forKey: 1)
print(dic)
//遍歷
for item in dic.keys {
print(dic[item]!)
}
- Range
//Range
let student = "yang"
let startIndex = student.index(student.startIndex, offsetBy: 2)
let endIndex = student.index(student.endIndex, offsetBy: -2)
let range = startIndex..<endIndex
student.substring(with: range)
冒泡法
//冒泡(排序算法)
var arr = [2,45,16,8,20]
for i in 0..<arr.count - 1 { //循環(huán)多少輪
for j in 0..<(arr.count - i - 1) { //比較多少次
//比較換位置
if (arr[j] > arr[j+1]) {
var temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
}
}
}
print(arr)
二叉樹(shù)的層級(jí)遍歷
//二叉樹(shù)的層級(jí)遍歷
class Node : NSObject {
var data : Int!
var leftChild : Node?
var rightChild : Node?
}
var node1 : Node = Node()
node1.data = 4
var node2 : Node = Node()
node2.data = 5
var node3 : Node = Node()
node3.data = 6
var node4 : Node = Node()
node4.data = 7
var node5 : Node = Node()
node5.data = 2
node5.leftChild = node1
node5.rightChild = node2
var node6 : Node = Node()
node6.data = 3
node6.leftChild = node3
node6.rightChild = node4
//根節(jié)點(diǎn)
var node7 = Node()
node7.data = 1
node7.leftChild = node5
node7.rightChild = node6
func readData(node : Node){
var arr = [Node]() //定義數(shù)組
arr.append(node) //根節(jié)點(diǎn)裝進(jìn)數(shù)組
while arr.count > 0 {
let temp = arr[0]
if let _ = temp.leftChild { //可選綁定
arr.append(temp.leftChild!) //左孩子裝進(jìn)數(shù)組
}
if let _ = temp.rightChild {
arr.append(temp.rightChild!)
}
//先打印再刪除
print(temp.data)
arr.remove(at: 0) //讀取完第一個(gè)元素的時(shí)候刪除
}
}
readData(node: node7)
函數(shù)
//函數(shù)
//1?? 無(wú)參數(shù)無(wú)返回值
func fun1() {
print("無(wú)參數(shù)無(wú)返回值")
}
fun1()
//2?? 無(wú)參數(shù)有返回值
func fun2() -> Int{
print("無(wú)參數(shù)有返回值")
return 0
}
//3?? 有參數(shù)有返回值
func func3(parm: Int) -> Int {
print("有參數(shù)有返回值")
return 0
}
//4?? 有參數(shù)無(wú)返回值
func func4(parm: Int) {
print("有參數(shù)無(wú)返回值")
}
//5?? 不定參數(shù)
func func5 (parm : Int...) {
var result : Int = 0
for i in parm {
result+=i
}
print(result)
}
//連加
func5(parm: 1,2,3,4)
//inout相當(dāng)于指針
func func6 (a :inout Int, b :inout Int) {
let temp = a
a = b
b = temp
}
var a = 10
var b = 20
func6(a: &a, b: &b)
print("a = \(a) b = \(b)")
day02
重寫(xiě)父類(lèi)(并進(jìn)行初始化)
class Student : NSObject {
var name : String?
var age : Int?
var gender : Bool?
//override重寫(xiě)父類(lèi)
override init() { //初始化方法
print("創(chuàng)造了一個(gè)學(xué)生對(duì)象")
}
init(age : Int, gender : Bool, name : String) {
super.init()
self.age = age
self.gender = gender
self.name = name
}
//析構(gòu)函數(shù)(放到類(lèi)里邊)
deinit {
print("對(duì)象釋放")
}
}
var stu : Student = Student(age:13, gender:false, name:"xiaoming")
print("name = \(stu.name) age = \(stu.age) gender = \(stu.gender)")
類(lèi)與結(jié)構(gòu)體的區(qū)別
- 類(lèi)
//類(lèi)
class Person : NSObject {
//存儲(chǔ)屬性
var name : String?
var age : Int?
//計(jì)算屬性
var fathersAge : Int {
set {
//newValue是默認(rèn)值
self.age = newValue - 20
}
get {
return self.age! + 20
}
}
//lazy屬性
lazy var st : Student = Student()
//函數(shù)
//方法調(diào)用
func eat() {
print("吃飯")
}
//類(lèi)名調(diào)用(類(lèi)函數(shù))
class func happy() {
print("happy")
}
//靜態(tài)不可繼承
static func study() {
print("學(xué)習(xí)")
}
//類(lèi)屬性
static var fatherName : String?
}
var p : Person = Person()
print(p.st)
- 結(jié)構(gòu)體
//結(jié)構(gòu)體
//1.結(jié)構(gòu)體不能繼承
//2.結(jié)構(gòu)體是值類(lèi)型,類(lèi)是引用類(lèi)型
struct Dog {
var name : String?
}
var dog : Dog = Dog()
p.name = "zhangsan"
dog.name = "wangcai"
var p1 = p
var dog1 = dog
p1.name = "lisi"
dog1.name = "dahuang"
print("p.name = \(p.name) dog.name = \(dog.name)")
枚舉
//枚舉
enum Season : String {
case Spring = "春天"
case Summer = "夏天"
case Autumn = "秋天"
case Winter = "冬天"
//case a,b,c
}
print(Season.Autumn.rawValue)
let season = Season.Spring
//遍歷
//switch .. case 必須包含所有的情況,否則使用default
switch season {
case .Spring :
print("1")
fallthrough //貫穿(??)
case .Summer :
print("2")
case .Autumn :
print("3")
case .Winter :
print("4")
}
let a = 10
switch a {
case 1...20 :
print("包含10")
case 2...30 :
print("包含10")
default:
print("")
}
協(xié)議
//協(xié)議
//定義一個(gè)協(xié)議
protocol PersonProtocol {
func study()
}
//可選協(xié)議
@objc protocol StudentProtocol {
@objc optional func happy()
var name : String{set get}
}
class Person: NSObject, StudentProtocol, PersonProtocol {
var newName : String?
var name : String {
set{
self.newName = newValue
}
get{
return self.newName!
}
}
func study() {
}
}
var p : Person = Person()
p.study()
p.name = "zhangsan"
print("p.name = \(p.name)")
- 練習(xí)題(1)
//練習(xí)題
//求圖形的面積及周長(zhǎng)(用協(xié)議)
//面向協(xié)議編程(面向?qū)ο蟮囊环N)
protocol Shape {
func Area() -> Float
func Perimeter() -> Float
}
//三角形
class Triangle : NSObject, Shape {
var height : Float!
var long : Float!
func Area() -> Float {
return height * long / 2.0
}
func Perimeter() -> Float {
return long * 3
}
}
//正方形
class Square : NSObject, Shape {
var length : Float!
func Area() -> Float {
return length * length
}
func Perimeter() -> Float {
return length * 4
}
}
///圓形
class Circle : NSObject, Shape {
var radius : Float!
func Area() -> Float {
return radius * radius * 3.14
}
func Perimeter() -> Float {
return 3.14 * 2 * radius
}
}
var triangle : Triangle = Triangle()
triangle.height = 2.5
triangle.long = 3.0
print("長(zhǎng)方形的面積長(zhǎng)為:",triangle.Area())
print("長(zhǎng)方形的周長(zhǎng)為:",triangle.Perimeter())
var square : Square = Square()
square.length = 4.0
print("正方形的面積長(zhǎng)為:",square.Area())
print("正方形的周長(zhǎng)為:",square.Perimeter())
var circle : Circle = Circle()
circle.radius = 2.25
print("圓形的面積長(zhǎng)為:",circle.Area())
print("圓形的周長(zhǎng)為:",circle.Perimeter())
- 練習(xí)題(2)
protocol GirlProtocol {
func payTheBill()
func happy()
}
//delegate
class Girl : NSObject {
//保存代理值
var delegate : GirlProtocol?
//
func shopBigin() {
if let _ = delegate {
delegate?.happy()
}
}
//購(gòu)物完畢
func shopOver() {
if let _ = delegate {
self.delegate?.payTheBill()
}
}
}
class Boy : NSObject, GirlProtocol {
func payTheBill() {
//實(shí)現(xiàn)協(xié)議
print("買(mǎi)單")
}
func happy() {
print("??")
}
//打游戲
func playGames() {
print("打游戲")
}
}
let boy : Boy = Boy()
let girl : Girl = Girl()
girl.delegate = boy
girl.shopOver()
girl.shopBigin()
- 練習(xí)題(3)
//協(xié)議
protocol FileProtocol {
//開(kāi)始
func Start()
//下載過(guò)程中
func downProcess()
//結(jié)束
func End()
//發(fā)生錯(cuò)誤
func Error()
}
//文件類(lèi)
class File : NSObject {
//保存代理值
var delegate1 : FileProtocol?
//文件管理
func fileManage() {
//開(kāi)始
if let _ = delegate1 {
delegate1?.Start()
}
//下載過(guò)程中
if let _ = delegate1 {
delegate1?.downProcess()
}
//結(jié)束
if let _ = delegate1 {
delegate1?.End()
}
//發(fā)生錯(cuò)誤
if let _ = delegate1 {
delegate1?.Error()
}
}
}
//處理文件類(lèi)
class handleFile : NSObject, FileProtocol {
//把四種狀態(tài)傳過(guò)來(lái)
//開(kāi)始
func Start() {
print("開(kāi)始")
}
//下載過(guò)程中
func downProcess() {
print("下載過(guò)程中")
}
//結(jié)束
func End() {
print("結(jié)束")
}
//發(fā)生錯(cuò)誤
func Error() {
print("發(fā)生錯(cuò)誤")
}
}
let file : File = File()
let handlefile : handleFile = handleFile()
file.delegate1 = handlefile
file.fileManage()
day03
泛型
//泛型
//打印數(shù)字 打印字符串 打印字符
func myPrintNumber(parm:Int) {
print(parm)
}
func myPrintString(parm:String) {
print(parm)
}
func myPrintCharacter(parm:Character) {
print(parm)
}
//泛型只寫(xiě)一個(gè)
func myPrint<T:Collection>(parm:T) {
print(parm)
}
let a = [1,2,3]
myPrint(parm: a)
冒泡排序法
func sort(num : Int, num1 : Int) -> Bool {
//if num >num1 true 否則 false
return num > num1 ? true : false
}
//定義一個(gè)變量 把sort賦值給變量
let fun : (Int,Int) -> Bool = sort
//使用變量調(diào)用函數(shù)
let result = fun(1,2)
print(result)
//冒泡排序法
var arr = [1,3,6,9,12]
func sortArr(parm:(Int,Int) -> Bool) {
for i in 0..<arr.count - 1 {
for j in 0..<arr.count - 1 - i {
if (parm(arr[j], arr[j+1])) {
let temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
}
}
}
}
sortArr(parm: sort)
print(arr)
func sort1(num: Int, num1: Int) -> Bool {
return num < num1 ? true : false
}
//調(diào)用
sortArr(parm: sort1)
print(arr)
閉包
//閉包
let block = { (a : Int, b : Int) -> Bool in
return a > b ? true : false
}
sortArr(parm: block)
let upSort : (Int, Int) -> Bool = {
return $0 > $1
}
let downSort : (Int, Int) -> Bool = {
return $0 < $1
}
sortArr(parm: upSort)
sortArr(parm: downSort)
print(arr)
day04
UIView
- 在ViewController.swift中super.viewDidLoad()下鍵入:
//獲取當(dāng)前控制器view,設(shè)置背景顏色為紅色
//self.view.backgroundColor = UIColor.red
//初始化
let rect = CGRect(x: 30, y: 30, width: 100, height: 200)
let subView : UIView = UIView(frame: rect)
//添加到父視圖上
subView.backgroundColor = UIColor.red
self.view.addSubview(subView)
let subView1 = UIView()
subView1.frame = CGRect(x: 140, y: 140, width: 100, height: 100)
subView1.backgroundColor = UIColor.blue
self.view.addSubview(subView1)
let subView2 = UIView()
subView2.frame = CGRect(x: 40, y: 40, width: 30, height: 30)
subView2.backgroundColor = UIColor.green
subView.addSubview(subView2)
//frame 相對(duì)于父視圖的
//bounds 相對(duì)于自身的坐標(biāo)
print(subView1.bounds)
//center
let subView3 = UIView()
self.view.addSubview(subView3)
subView3.frame = CGRect(origin: self.view.center, size: CGSize(width: 100, height: 100))
subView3.backgroundColor = #colorLiteral(red: 0.9098039269, green: 0.4784313738, blue: 0.6431372762, alpha: 1)
//透明度
//subView3.alpha = 0.1 //這種會(huì)影響子視圖
subView3.backgroundColor = UIColor(colorLiteralRed: 0.5, green: 0.5, blue: 0.5, alpha: 0.5) //三原色修改透明度
let subView4 = UIView(frame: CGRect(x: 10, y: 10, width: 40, height: 40))
subView4.backgroundColor = #colorLiteral(red: 0.2745098174, green: 0.4862745106, blue: 0.1411764771, alpha: 1)
subView3.addSubview(subView4)
//tag 使用2000以上的
subView4.tag = 10001 //10000以上
//subView4.isHidden = true //隱藏
let tagView = subView3.viewWithTag(10001)
print("subView4 = \(subView4),Tag = \(tagView)")
//用戶(hù)交互??
//self.view.isUserInteractionEnabled = false
//self.view.isUserInteractionEnabled = true //打開(kāi)
//superView
print("superView = \(subView4.superview),subView3 = \(subView3)")
//子視圖
for item in self.view.subviews {
//從父視圖上移除
item.removeFromSuperview()
}
//程序啟動(dòng)
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//初始化window
let frame = UIScreen.main.bounds
self.window = UIWindow(frame: frame)
//初始化控制器
let myVC = MyViewController()
//設(shè)置成window的根視圖控制器
self.window?.rootViewController = myVC
//把window設(shè)置成系統(tǒng)的主window
self.window?.makeKeyAndVisible()
return true
}
- 在ViewController類(lèi)中鍵入:
//開(kāi)始點(diǎn)擊
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print("點(diǎn)擊了當(dāng)前的控制器")
}
command+n新建一個(gè)Cocoa Touch Class,名為:MyViewController,將ViewController改為自己新建的MyViewController;
在AppDelegate.swift中AppDelegate類(lèi)中鍵入:
//程序啟動(dòng)
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//初始化window
let frame = UIScreen.main.bounds
self.window = UIWindow(frame: frame)
//初始化控制器
let myVC = MyViewController()
//設(shè)置成window的根視圖控制器
self.window?.rootViewController = myVC
//把window設(shè)置成系統(tǒng)的主window
self.window?.makeKeyAndVisible()
return true
}
- 在MyViewController.swift中viewDidLoad()事件下鍵入:
self.view.backgroundColor = #colorLiteral(red: 0.9098039269, green: 0.4784313738, blue: 0.6431372762, alpha: 1)
- 運(yùn)行結(jié)果:

(注:文章代碼部分屬于后加,與前兩段寫(xiě)作時(shí)間不是同一天。)