swift 基础小结02 -- VFL约束、属性的get和set方法、懒加载

一、属性的get和set方法

1、自定义属性的set和get方法

private(set) var _image:UIImage?

//自定义属性get,set

var image : UIImage?{

get{

return _image

}

set(newValue){

_image = newValue

self.imageView?.image = _image

}

}

2、重写父类属性的set和get方法

//重写父类属性get,set

override var tag:Int{

get{

return super.tag

}

set(newValue){

super.tag = newValue

self.button?.tag = newValue

}

二、VFL添加约束

和objective-c中相似,代码如下

let tabbarHeight:CGFloat = 49.0

func setupBaseUI(){

self.contentView.translatesAutoresizingMaskIntoConstraints = false

self.lineView.translatesAutoresizingMaskIntoConstraints = false

self.tabBar.translatesAutoresizingMaskIntoConstraints = false

let views = self.ConstraintDictionWithArray(nameArray: [self.contentView,self.lineView,self.tabBar,self.view], object: self);

NSLayoutConstraint.activate(NSLayoutConstraint.constraints(withVisualFormat: "H:|[contentView]|", options: NSLayoutFormatOptions.alignAllLeft, metrics: nil, views: views))

NSLayoutConstraint.activate(NSLayoutConstraint.constraints(withVisualFormat: "H:|[tabBar]|", options: NSLayoutFormatOptions.alignAllLeft, metrics: nil, views: views))

NSLayoutConstraint.activate(NSLayoutConstraint.constraints(withVisualFormat: "V:|[contentView][tabBar(tabbarHeight)]|", options: NSLayoutFormatOptions.alignAllLeft, metrics: ["tabbarHeight":(self.isIphoneX() ? tabbarHeight_iphoneX : tabbarHeight)], views: views))

NSLayoutConstraint.activate(NSLayoutConstraint.constraints(withVisualFormat: "H:|[lineView]|", options: NSLayoutFormatOptions.alignAllLeft, metrics: nil, views: views))

NSLayoutConstraint.activate(NSLayoutConstraint.constraints(withVisualFormat: "V:|[lineView(0.5)]", options: NSLayoutFormatOptions.alignAllLeft, metrics: nil, views: views))

}

//MARK: 相当于OC中的NSBinding(因为oc中没有宏定义,没有NSBinding这个宏定义,所以写一个方法代替这个方法)

func ConstraintDictionWithArray(nameArray:Array<UIView>,object:AnyObject) -> Dictionary<String,AnyObject> {

var dict:Dictionary<String,AnyObject> = [:]

var count:UInt32 = 0

let ivars = class_copyIvarList(object.classForCoder, &count)

for i in 0...Int(count) {

let obj = object_getIvar(object, ivars![i])

if let temp = obj as? UIView {

if nameArray.contains(temp){

let name = String.init(cString: ivar_getName(ivars![i])!)

dict[name] = temp

}

}

}

free(ivars)

return dict

}

三、懒加载

1、懒加载创建label

//MARK: 懒加载创建label

lazy var lazyLabel: UILabel = self.addLabel_d(title: "");

func addLabel_d(title:String) -> UILabel {

let label = UILabel(frame: CGRect.init(x: 0, y: 0, width: 200, height: 40))

label.center = self.view.center

label.backgroundColor = UIColor.gray

label.textColor = UIColor.white

label.textAlignment = NSTextAlignment.center

label.numberOfLines = 0

label.lineBreakMode = NSLineBreakMode.byWordWrapping

label.text = title

label.font = UIFont.systemFont(ofSize: 17)

return label;

}

2、懒加载数组

//lazy

lazy var datasource:NSArray = {

var tmpdatasource = NSArray(objects: ["title":"dispatch使用","content":["sync -- 同步","async -- 异步","delay -- 延迟执行三秒","main -- 主线程","global -- 全局并发队列"]],["title":"网络请求","content":["GET -- 请求","POST -- 请求","下载图片"]],["title":"自定义组件","content":["toast","。。。"]])

return tmpdatasource

}()

原文地址:https://www.cnblogs.com/sunjianfei/p/9467860.html

时间: 2024-08-25 21:21:47

swift 基础小结02 -- VFL约束、属性的get和set方法、懒加载的相关文章

IOS 开发笔记-基础 UI(6)照片浏览器(控件的懒加载)

使用UIImageView.UILabel.UIButton实现一个综合小案例 功能分析 (1)点击箭头切换序号.图片.描述 (2)如果是首张图片,左边箭头不能点击 (3)如果是尾张图片,右边箭头不能点击 步骤分析 (1)搭建UI界面 (2)监听按钮点击 切换序号.图片.描述 1. 界面分析 1> 需要读取或修改的属性的控件 // 序号标签 // 图片 // 图片描述 // 左边按钮 // 右边按钮 2> 需要监听响应事件的对象,需要添加监听方法 // 左边按钮 // 右边按钮 uiimage

Swift学习(4懒加载、计算型属性、反射机制)

懒加载.计算型属性.反射机制 1.懒加载: 目的:1.延迟创建,需要时加载,节省内存空间 2.避免开发中处理解包的问题(重要!!!) 知识:1.所有的UIView 及子类在开发是,一旦重写了够着函数,必须要实现initwithcoder函数以保证提供两个通道,目前Xcode会有提示. 2.在swift中懒加载的简单写法 lazy var label:UILabel = UILabel() 3.懒加载本质上是一个闭包,完整写法如下: {}包装代码  ()执行代码 lazy var labe = {

iOS 开发——实用技术Swift篇&amp;Swift 懒加载(lazy)

Swift 懒加载(lazy) 在程序设计中,我们经常会使用 * 懒加载 * ,顾名思义,就是用到的时候再开辟空间,比如iOS开发中的最常用控件UITableView,实现数据源方法的时候,通常我们都会这样写 Objective-C 1 //必须实现的数据源代理方法 2 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 3 { 4 return self.dataArr

类和对象的方法与属性---懒加载与私有事件---单例与私有化构造函数

对象属性: 1.private修饰的属性:只能在本类内部访问,分类和外部都不能访问(彻底私有) 2.fileprivate修饰的属性:在本类和分类中可以访问,外部不能访问(部分私有) 3.直接用let或var修饰的属性:在本类.分类和外部都可以访问(开放) 4.在分类中只能声明计算属性,不能声明存储属性 1 // 属性:可以被外界访问 2 var name:String? 3 4 // private修饰的属性:只能在本类内部访问,分类和外部都不能访问 5 private var age:Str

Swift的懒加载和只读属性的介绍

懒加载 在 iOS 开发中,懒加载是无处不在的 懒加载的格式如下: lazy var person: Person = { print("懒加载") return Person() }() 懒加载本质上是一个闭包 以上代码可以改写为以下格式 let personFunc = { () -> Person in print("懒加载") return Person() } lazy var demoPerson: Person = self.personFunc

swift学习第十六天:懒加载和tableView

懒加载 懒加载的介绍 swift中也有懒加载的方式 (苹果的设计思想:希望所有的对象在使用时才真正加载到内存中) 和OC不同的是swift有专门的关键字来实现懒加载 lazy关键字可以用于定义某一个属性懒加载 懒加载的使用 格式 lazy var 变量: 类型 = { 创建变量代码 }() 懒加载的使用 // 懒加载的本质是,在第一次使用的时候执行闭包,将闭包的返回值赋值给属性 // lazy的作用是只会赋值一次 lazy var array : [String] = { () -> [Stri

20.Swift懒加载lazy

// Swift懒加载使用lazy关键字来修饰属性 // 在属性后面跟= {}进行具体的赋值 // 只会被加载一次 lazy var names : [String]? = { // () -> ([String]) in print("加载数据") return ["why", "lnj", "lmj"] }() override func viewDidLoad() { super.viewDidLoad() } o

Swift 懒加载(lazy) 和 Objective-C 懒加载的区别

在程序设计中,我们经常会使用 懒加载 ,顾名思义,就是用到的时候再开辟空间,比如iOS开发中的最常用控件UITableView,实现数据源方法的时候,通常我们都会这样写 Objective-C - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.dataArray.count; } - (UITableViewCell *)tableView:

【SSH三大框架】Hibernate基础第十二篇:load()懒加载分析以及一对一、一对多、多对一、多对多懒加载的分析

一.懒加载的定义: 懒加载:在WEB应用程序中,经常会需要查询数据库,系统的响应速度在很大程度上是与数据库交互的响应.因此,如果能够优化与数据库的交互速度,则能够大大提高WEB应用的响应速度. 例如:当有一个Student类和一个Teacher类.当我们加载一个学生的所有信息,包括:学号,姓名等属性后,此时Student类中的Teacher类型的属性为null,当我们需要知道这个Student对应的Teacher属性的时候,我们才去加载这个Teacher对象. 如果,我们只需要知道学生信息,我们