2016年11月18日 星期五 晚
11月的集寧芍锚,相對于來大學(xué)的以往兩年反倒給人一些暖意砂客,但畢竟是晚上花椭,天氣預(yù)報的降溫也漸漸的若隱若現(xiàn)了,集寧的冬天終于要來了疲陕。想想大三正在經(jīng)歷過的集寧方淤,突然覺得有些懷念,暖暖的集寧竟給人一絲可愛的留念的味道蹄殃,貌似之前寒風(fēng)刺骨的感覺沒有那么的強(qiáng)烈携茂,那么的“可怕”了。每次從教室到食堂再到宿舍的三點一線途中诅岩,總有種被集寧的大風(fēng)吹成“傻狗”的感覺讳苦,然而今年,卻對她的看法發(fā)生了改變吩谦。我想鸳谜,我是愛她的,而她式廷,也是愛我們的咐扭。
現(xiàn)在的我正坐在電腦前寫著我的swift實訓(xùn)心得。想想滑废,這是大三第一學(xué)期第一次實訓(xùn)的第5天蝗肪,準(zhǔn)確來說是第4天,因為第1天的時候蠕趁,學(xué)校和藍(lán)鷗進(jìn)行了“共建專業(yè)開班典禮”薛闪,作為藍(lán)鷗派來的老師,鋒哥大概的給我們介紹了關(guān)于他們公司的一些內(nèi)容以及現(xiàn)在各個語言的發(fā)展情況等妻导,所以實訓(xùn)是從周二才開始的。隨著這五天的相處怀各,感覺鋒哥講課比較快倔韭,同學(xué)們很多有些跟不上,而且原來學(xué)的也都忘的差不多了瓢对,后來才知道鋒哥在他公司是直接帶人做項目的寿酌,所以光講重點的部分,自然講的也快硕蛹。雖然鋒哥講課快醇疼,但說實話其實鋒哥是個很牛X的人,上課帶我們打代碼也很快法焰,講各個重要的知識點秧荆,控件的屬性、方法時也都特別仔細(xì)埃仪,概念大家不懂的時候他也會舉通俗的??乙濒,盡量讓大家聽懂,還讓我們下一些與專業(yè)方面相關(guān)的APP、網(wǎng)頁那些讓我們課下自己進(jìn)行學(xué)習(xí)颁股,感覺他很盡責(zé)么库,也很努力的讓我們多去學(xué)一些東西。話不多說甘有,給峰哥個6诉儒,希望他能一直陪著我們學(xué)習(xí)。
這次實訓(xùn)主要是以swift3.0相關(guān)的內(nèi)容展開的亏掀,雖然大二的時候?qū)wift課程進(jìn)行過簡單忱反、系統(tǒng)性的學(xué)習(xí),但當(dāng)時我們所學(xué)習(xí)的是swift2.0的內(nèi)容幌氮,還有一點:大家經(jīng)過一年的其他科目的學(xué)習(xí)缭受,對swift的基本語法已經(jīng)模糊了,更何況是改進(jìn)過的新內(nèi)容该互。所以這次的實訓(xùn)可謂是又從零開始的學(xué)習(xí)米者。但相比之前,同學(xué)們的積極性也有所提高宇智,每個人都有想學(xué)習(xí)的欲望蔓搞,并且都希望可以學(xué)會。而且這次的實訓(xùn)較之前的時間較長随橘,完全可以從什么都不會開始學(xué)習(xí)喂分,課下也有好多時間可以進(jìn)行練習(xí),對代碼進(jìn)行學(xué)習(xí)記憶机蔗,總之課程的安排相對還是比較合理的蒲祈。
下面,我就對近幾天實訓(xùn)的內(nèi)容進(jìn)行總結(jié)萝嘁,其中包括一些重點梆掸,非重點,如果內(nèi)容不夠嚴(yán)密牙言、不夠好酸钦,希望不要噴。
day01
定義常量咱枉、變量
//自動類型推斷 var 定義變量
var str = "Hello, playground"
//let 定義常量(不能修改的量)
var name = "Hello, plyground"
基本數(shù)據(jù)類型
- 字符卑硫、整型、浮點型蚕断、雙精度浮點型
//數(shù)據(jù)類型
//1??字符
let gender : Character = "M"
//2??整型
let age :Int = 12
//3??浮點型
let height : Float = 12.2
//4??雙精度浮點型
let height1 : Double = 12.222
- 字符串
//5??字符串
let name1 : String = "Lanou"
//長度
let length = name.characters.count
//拼接
let name2 = name + "pinjie"
var name3 = name + "\(name1)"
//插入
//獲取第幾個位置
let index = name3.index(name3.startIndex,offsetBy:5)
//插入上面獲取的位置
name3.insert(contentsOf: "charu".characters/*字符集合*/, at: index)
name3.insert("a", at: name3.startIndex)/*一個字符*/
//遍歷
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)
//更新元素(把第二個元素?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)
二叉樹的層級遍歷
//二叉樹的層級遍歷
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é)點
var node7 = Node()
node7.data = 1
node7.leftChild = node5
node7.rightChild = node6
func readData(node : Node){
var arr = [Node]() //定義數(shù)組
arr.append(node) //根節(jié)點裝進(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) //讀取完第一個元素的時候刪除
}
}
readData(node: node7)
函數(shù)
//函數(shù)
//1?? 無參數(shù)無返回值
func fun1() {
print("無參數(shù)無返回值")
}
fun1()
//2?? 無參數(shù)有返回值
func fun2() -> Int{
print("無參數(shù)有返回值")
return 0
}
//3?? 有參數(shù)有返回值
func func3(parm: Int) -> Int {
print("有參數(shù)有返回值")
return 0
}
//4?? 有參數(shù)無返回值
func func4(parm: Int) {
print("有參數(shù)無返回值")
}
//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
重寫父類(并進(jìn)行初始化)
class Student : NSObject {
var name : String?
var age : Int?
var gender : Bool?
//override重寫父類
override init() { //初始化方法
print("創(chuàng)造了一個學(xué)生對象")
}
init(age : Int, gender : Bool, name : String) {
super.init()
self.age = age
self.gender = gender
self.name = name
}
//析構(gòu)函數(shù)(放到類里邊)
deinit {
print("對象釋放")
}
}
var stu : Student = Student(age:13, gender:false, name:"xiaoming")
print("name = \(stu.name) age = \(stu.age) gender = \(stu.gender)")
類與結(jié)構(gòu)體的區(qū)別
- 類
//類
class Person : NSObject {
//存儲屬性
var name : String?
var age : Int?
//計算屬性
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("吃飯")
}
//類名調(diào)用(類函數(shù))
class func happy() {
print("happy")
}
//靜態(tài)不可繼承
static func study() {
print("學(xué)習(xí)")
}
//類屬性
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)體是值類型,類是引用類型
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é)議
//定義一個協(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í)題
//求圖形的面積及周長(用協(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("長方形的面積長為:",triangle.Area())
print("長方形的周長為:",triangle.Perimeter())
var square : Square = Square()
square.length = 4.0
print("正方形的面積長為:",square.Area())
print("正方形的周長為:",square.Perimeter())
var circle : Circle = Circle()
circle.radius = 2.25
print("圓形的面積長為:",circle.Area())
print("圓形的周長為:",circle.Perimeter())
- 練習(xí)題(2)
protocol GirlProtocol {
func payTheBill()
func happy()
}
//delegate
class Girl : NSObject {
//保存代理值
var delegate : GirlProtocol?
//
func shopBigin() {
if let _ = delegate {
delegate?.happy()
}
}
//購物完畢
func shopOver() {
if let _ = delegate {
self.delegate?.payTheBill()
}
}
}
class Boy : NSObject, GirlProtocol {
func payTheBill() {
//實現(xiàn)協(xié)議
print("買單")
}
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 {
//開始
func Start()
//下載過程中
func downProcess()
//結(jié)束
func End()
//發(fā)生錯誤
func Error()
}
//文件類
class File : NSObject {
//保存代理值
var delegate1 : FileProtocol?
//文件管理
func fileManage() {
//開始
if let _ = delegate1 {
delegate1?.Start()
}
//下載過程中
if let _ = delegate1 {
delegate1?.downProcess()
}
//結(jié)束
if let _ = delegate1 {
delegate1?.End()
}
//發(fā)生錯誤
if let _ = delegate1 {
delegate1?.Error()
}
}
}
//處理文件類
class handleFile : NSObject, FileProtocol {
//把四種狀態(tài)傳過來
//開始
func Start() {
print("開始")
}
//下載過程中
func downProcess() {
print("下載過程中")
}
//結(jié)束
func End() {
print("結(jié)束")
}
//發(fā)生錯誤
func Error() {
print("發(fā)生錯誤")
}
}
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)
}
//泛型只寫一個
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
}
//定義一個變量 把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 相對于父視圖的
//bounds 相對于自身的坐標(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 //這種會影響子視圖
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)")
//用戶交互??
//self.view.isUserInteractionEnabled = false
//self.view.isUserInteractionEnabled = true //打開
//superView
print("superView = \(subView4.superview),subView3 = \(subView3)")
//子視圖
for item in self.view.subviews {
//從父視圖上移除
item.removeFromSuperview()
}
//程序啟動
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類中鍵入:
//開始點擊
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print("點擊了當(dāng)前的控制器")
}
command+n新建一個Cocoa Touch Class,名為:MyViewController,將ViewController改為自己新建的MyViewController;
在AppDelegate.swift中AppDelegate類中鍵入:
//程序啟動
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)
- 運行結(jié)果:
day01
定義常量欢伏、變量
//自動類型推斷 var 定義變量
var str = "Hello, playground"
//let 定義常量(不能修改的量)
var name = "Hello, plyground"
基本數(shù)據(jù)類型
- 字符、整型亿乳、浮點型颜懊、雙精度浮點型
//數(shù)據(jù)類型
//1??字符
let gender : Character = "M"
//2??整型
let age :Int = 12
//3??浮點型
let height : Float = 12.2
//4??雙精度浮點型
let height1 : Double = 12.222
- 字符串
//5??字符串
let name1 : String = "Lanou"
//長度
let length = name.characters.count
//拼接
let name2 = name + "pinjie"
var name3 = name + "\(name1)"
//插入
//獲取第幾個位置
let index = name3.index(name3.startIndex,offsetBy:5)
//插入上面獲取的位置
name3.insert(contentsOf: "charu".characters/*字符集合*/, at: index)
name3.insert("a", at: name3.startIndex)/*一個字符*/
//遍歷
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)
//更新元素(把第二個元素?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)
二叉樹的層級遍歷
//二叉樹的層級遍歷
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é)點
var node7 = Node()
node7.data = 1
node7.leftChild = node5
node7.rightChild = node6
func readData(node : Node){
var arr = [Node]() //定義數(shù)組
arr.append(node) //根節(jié)點裝進(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) //讀取完第一個元素的時候刪除
}
}
readData(node: node7)
函數(shù)
//函數(shù)
//1?? 無參數(shù)無返回值
func fun1() {
print("無參數(shù)無返回值")
}
fun1()
//2?? 無參數(shù)有返回值
func fun2() -> Int{
print("無參數(shù)有返回值")
return 0
}
//3?? 有參數(shù)有返回值
func func3(parm: Int) -> Int {
print("有參數(shù)有返回值")
return 0
}
//4?? 有參數(shù)無返回值
func func4(parm: Int) {
print("有參數(shù)無返回值")
}
//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
重寫父類(并進(jìn)行初始化)
class Student : NSObject {
var name : String?
var age : Int?
var gender : Bool?
//override重寫父類
override init() { //初始化方法
print("創(chuàng)造了一個學(xué)生對象")
}
init(age : Int, gender : Bool, name : String) {
super.init()
self.age = age
self.gender = gender
self.name = name
}
//析構(gòu)函數(shù)(放到類里邊)
deinit {
print("對象釋放")
}
}
var stu : Student = Student(age:13, gender:false, name:"xiaoming")
print("name = \(stu.name) age = \(stu.age) gender = \(stu.gender)")
類與結(jié)構(gòu)體的區(qū)別
- 類
//類
class Person : NSObject {
//存儲屬性
var name : String?
var age : Int?
//計算屬性
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("吃飯")
}
//類名調(diào)用(類函數(shù))
class func happy() {
print("happy")
}
//靜態(tài)不可繼承
static func study() {
print("學(xué)習(xí)")
}
//類屬性
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)體是值類型,類是引用類型
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é)議
//定義一個協(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í)題
//求圖形的面積及周長(用協(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("長方形的面積長為:",triangle.Area())
print("長方形的周長為:",triangle.Perimeter())
var square : Square = Square()
square.length = 4.0
print("正方形的面積長為:",square.Area())
print("正方形的周長為:",square.Perimeter())
var circle : Circle = Circle()
circle.radius = 2.25
print("圓形的面積長為:",circle.Area())
print("圓形的周長為:",circle.Perimeter())
- 練習(xí)題(2)
protocol GirlProtocol {
func payTheBill()
func happy()
}
//delegate
class Girl : NSObject {
//保存代理值
var delegate : GirlProtocol?
//
func shopBigin() {
if let _ = delegate {
delegate?.happy()
}
}
//購物完畢
func shopOver() {
if let _ = delegate {
self.delegate?.payTheBill()
}
}
}
class Boy : NSObject, GirlProtocol {
func payTheBill() {
//實現(xiàn)協(xié)議
print("買單")
}
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 {
//開始
func Start()
//下載過程中
func downProcess()
//結(jié)束
func End()
//發(fā)生錯誤
func Error()
}
//文件類
class File : NSObject {
//保存代理值
var delegate1 : FileProtocol?
//文件管理
func fileManage() {
//開始
if let _ = delegate1 {
delegate1?.Start()
}
//下載過程中
if let _ = delegate1 {
delegate1?.downProcess()
}
//結(jié)束
if let _ = delegate1 {
delegate1?.End()
}
//發(fā)生錯誤
if let _ = delegate1 {
delegate1?.Error()
}
}
}
//處理文件類
class handleFile : NSObject, FileProtocol {
//把四種狀態(tài)傳過來
//開始
func Start() {
print("開始")
}
//下載過程中
func downProcess() {
print("下載過程中")
}
//結(jié)束
func End() {
print("結(jié)束")
}
//發(fā)生錯誤
func Error() {
print("發(fā)生錯誤")
}
}
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)
}
//泛型只寫一個
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
}
//定義一個變量 把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 相對于父視圖的
//bounds 相對于自身的坐標(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 //這種會影響子視圖
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)")
//用戶交互??
//self.view.isUserInteractionEnabled = false
//self.view.isUserInteractionEnabled = true //打開
//superView
print("superView = \(subView4.superview),subView3 = \(subView3)")
//子視圖
for item in self.view.subviews {
//從父視圖上移除
item.removeFromSuperview()
}
//程序啟動
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類中鍵入:
//開始點擊
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print("點擊了當(dāng)前的控制器")
}
command+n新建一個Cocoa Touch Class,名為:MyViewController,將ViewController改為自己新建的MyViewController;
在AppDelegate.swift中AppDelegate類中鍵入:
//程序啟動
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)
- 運行結(jié)果:
(注:文章代碼部分屬于后加,與前兩段寫作時間不是同一天。)