Swift小项目计划学习笔记-Day2 //外部参数/尾随闭包/KVC/便利构造函数

ViewController.swift文件:

      //  ViewController.swift
      //  001-第02天(Swift面向对象)
      //
      //  Created by 张云翥 on 2018/7/14.
      //  Copyright © 2018年 张云翥. All rights reserved.

import UIKit
class ViewController: UIViewController {
    override func viewDidLoad() {
    super.viewDidLoad()
    //        print(sum(num1: 10, num2: 20))
    //        print(sum1( y: 5))
    //        demo()
    //        demo3()
    //        demo5()
    //        demo6()
    //        onClickBtn()
    //        demo7()
    //        demo8()
    //        demo9()
    //        demo10()
    //        demo11()
        demo12()
            }

//1.外部参数写在参数之前
func sum(num1 x:Int,num2 y:Int) -> Int {
    return x + y
}

//2.参数默认值(有了默认参数就可以不用给两个参数赋值,更灵活)
func sum1(x:Int = 1,y:Int = 2) -> Int {
    return x + y
}

//3.闭包的定义:提前准备好代码,在需要的时候执行,可当做参数传递
//函数是特殊的闭包
func demo() {
    let b1 = {
        print("hello")
    }
    b1()
}
//4. 带参数的闭包,in分隔,花括号包的是一段执行的代码
func demo3(){
    let b2 = { (x:Int) -> Void in
        print(x)
    }
    b2(10)
}


//5.尾随闭包额外参数

func demo4() {
    //command + control + e 全部替换
    let i = UILabel()
    view.addSubview(i)
    //Extra argument in call 调用了额外参数
   // {//相当于()->Void
   //     let i = UILabel()
   //     view.addSubview(i)
   // }
}

//6.最后一个参数是闭包(函数),函数可以提前结束后面再跟尾随闭包
func demo5() {
    DispatchQueue.global().async {
        print("耗时操作")
        
        Thread.sleep(forTimeInterval: 5)//耗时五秒
        
        DispatchQueue.main.async {
        print("回到主线程")
        }
    }
}

//7.按钮

 func onClickBtn() {
    print(#function)
    
}

func demo6() {
    let btn = UIButton(frame: CGRect(x: 20, y: 50, width: 20, height: 20))
    
    btn.setTitle("张云翥", for: .normal)
    btn.setTitleColor(#colorLiteral(red: 0.1411764771, green: 0.3960784376, blue: 0.5647059083, alpha: 1), for: .normal)
    btn.sizeToFit()
    btn.center = view.center
    btn.addTarget(self,action:Selector(("onClickBtn:")), for: .touchUpOutside)
    view.addSubview(btn)
    print(#function)
}

func demo7() {
    let p = Person()
    print(p)//8.<_01_Á¨¨02§©_SwiftÈù¢ÂêëÂØπ˱°_.Person: 0x6040000154c0>有命名空间
    let p2 = Person(name: "zyz", age: 18)
    print(p2.age)
    
}

func demo8() {
    let p = Person()
    print(p.name)
    
    let p1 =  Person(name: "nihao")
    print(p1.name)
    
}

func demo9() {
    let p = student(dict: ["name" : "raoqian" ])
    print(p.name ?? "")
    //this class is not key value coding-compliant for the key name.'
    //10.kvc找不到key值,因为可选类型是swift里面的,而kvc是oc里的,oc里面的key是基本数据类型(里面可没有可选类型哦)
    
}

func demo10(){
    //11.swift 4.0的kvc
    let p2 = Person(name:"zyz")
    let nameKeyPath = \Person.name
    let name = p2[keyPath:nameKeyPath]
    print(name)
    p2[keyPath:nameKeyPath] = "haoshuai"
    print(p2.name)
}

func demo11() {
    let d = Dog(name: "zyz", age: 101)//没输出nil
    let d2 = Dog(name: "rq", age: 22)
    
    print(d?.name ?? "nil")
    print(d2?.name ?? "nil")
}
func demo12() {
    let b = UIButton(frame: CGRect(x: 20, y: 20, width: 100, height: 100), title: "按钮", UIColor: UIColor.blue)
    self.view.addSubview(b)
      }
    }
class Person :NSObject{

var name : String
var age = 0

//重写
override init() {
    //9.先初始化自己的属性,在调用父类的构造函数
    //NSObject没有没有属性,只有一个isa的成员变量
    name = "zyz"
    super.init()
    
}

//重载
init(name : String) {
    self.name = name
    super.init()
}

init(name :String,age :Int) {
    self.age = age
    self.name = name
}

}

   class student: NSObject {
@objc var name :String?
//12.在Swift4.0之后,类必须要继承自NSObject,同时还需要在属性前面加上@objc
var name2 :String?


init(dict:[String:Any]) {
    
    super.init()
    
    setValuesForKeys(dict)
    
  }  
 }

    class Pig {
var name:String = ""
init(name:String){
    self.name = name;
      }
 }
  class Dog: NSObject {
var name : String?
var age:Int = 0
//13.便利构造函数,只有在复合条件时候才创建对象,节省内存,用于筛选对象构造函数参数
//convenience不负责对象创建,用于条件判断和配合类扩展简化内存创建
convenience  init?(name : String,age : Int) {
    if age > 100 {
        return nil
    }
    self.init()//只有便利构造函数才使用
    self.name = name
}
}

UIButton+extension.swift文件:

    //  UIButton+extension.swift
    //  001-第02天(Swift面向对象)
    //
    //  Created by 张云翥 on 2018/7/16.
    //  Copyright © 2018年 张云翥. All rights reserved.



    import UIKit
    extension UIButton{
    // Designated initializer cannot be declared in an extension
    //被重新设计的初始化器不能再累扩展里面被申明,必须使用便利构造函数
    convenience init(frame: CGRect,title:String,UIColor:UIColor) {
    self.init(frame: frame)
    //        self.frame = frame
    self.setTitle(title, for: UIControlState(rawValue: 0))
    self.setTitleColor(UIColor, for: UIControlState(rawValue: 0))
    self.sizeToFit()
  }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,717评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,501评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,311评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,417评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,500评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,538评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,557评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,310评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,759评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,065评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,233评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,909评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,548评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,172评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,420评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,103评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,098评论 2 352

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生_X自主阅读 15,979评论 3 119
  • 转载自:https://github.com/Tim9Liu9/TimLiu-iOS[https://github...
    香橙柚子阅读 8,517评论 0 35
  • 第六章 知闲在走廊的围栏上坐了下来,静静地看着眼前的孤独静美的倔强。故事的整体风格偏向伤感忧郁,男主是全身散发...
    星如雨雨雨阅读 185评论 0 0
  • 美好 忘记所有心跳 挥不去 黑夜般黏稠的思念 从白色的裂缝渗透 挥手告别 以固有的姿态翻开心扉 流淌的时光记载着欢...
    一直兵戈阅读 124评论 0 0
  • 文/清峰 为什么天空和大海都是蓝的? 或许大海正是海国的天空吧! 海国的人望着大海 我们望向天空 海豚在跳出水面的...
    Dorisblink阅读 902评论 9 9