自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(106)
  • 收藏
  • 关注

原创 高级运算符

位运算符// 1. 按位取反运算符var a: UInt8 = 0b00001111var b = ~aprint(b,terminator:"\n\n")// 2. 按位与运算符var c = a & bprint(c,terminator:"\n\n")// 3. 按位或运算符var d = a | bprint(d,terminator:"\n\n")...

2019-07-20 11:18:12 398

原创 访问控制

访问控制修饰符open: 模块完全开放,在别的模块下可以进行继承后重写。public: 模块开放,在别的模块下不可以进行继承重写。internal: 只能在本模块内部使用。(默认)fileprivate: 只能在本文件内部使用。private: 只能在定义的作用域内使用。类型的访问权限会影响实体的访问权限open class a { var a = 3 // ...

2019-07-19 12:01:33 113

原创 内存安全

在inout参数的函数inout参数的变量会在函数内进行长期的写访问,如果在这个期间函数内部访问了外部的这个相同的内存将会报错,发生运行时的错误。解决办法1是在函数外将这个内存的值复制一份给两一个变量,这样在函数内部访问这个变量即可,因为现在访问的将会是另一个内存。解决办法2是在函数内部不访问外部的这个相同的内存,只是用传入的参数。// 报错示例var stepSize = 1...

2019-07-18 11:20:08 490

原创 自动引用计数

使用弱引用解决循环强引用如果两个变量属性都可以设置为nil,那么就用弱引用来设置其中一个属性来解决循环强引用。class Person { let name: String init(name: String) { self.name = name } weak var apartment: Apartment? deini...

2019-07-17 15:56:39 137

原创 对象 类对象 元类对象

对象 类对象 元类对象的isa指针指向类对象类对象的isa指针指向元类类对象和元类其他都是对象,是编译器为我们创建的。对象初始化先根据类对象初始化内存大小。初始化对象isa指针即可。方法的调用对象方法的调用。实际上根据对象isa去类对象去查找对象方法去调用。找不到就去类对象的superCls指针去父类对象去查找,再找不到就进行消息转发。没有实现消息转发那就会崩溃。类方法的调用。实际上我们代码用的类就是类对象。根据类对象isa指针去元类对象查找方法去调用,也会查找父类的元类对象。过

2020-05-29 16:00:32 211

原创 引用计数与弱引用

简书:https://www.jianshu.com/p/ef6d9bf8fe59gitHub:https://github.com/Draveness/Analyze/blob/master/contents/objc/黑箱中的%20retain%20和%20release.md

2020-05-09 16:56:05 290

原创 链式编程

### 背景最近涉及到画折线图业务,由于以前工程代码用的是AAChartKitLib三方,这次app迭代涉及到修改折线图样式,所以自己看了下这个三方源代码。发现使用时候用的是链式属性赋值,自己研究了下。### 原理```self.aaChartModel= AAChartModel.new.chartTypeSet(AAChartTypeLine)//图表类型.titleSet(@...

2020-04-28 16:18:17 256

原创 UITextView自适应高度

currentLineNum = 1;//默认文本框显示一行文字NSDictionary *dict=@{NSFontAttributeName:[UIFont systemFontOfSize:14.0]};CGSize contentSize=[@"我" sizeWithAttributes:dict];heightText = contentSize.height;self.tex...

2019-12-20 14:38:50 479

原创 不透明类型

它是swift5.1新特性不透明类型可以将函数的返回类型进行隐藏。不透明的返回类型将更加灵活。不透明类型是反泛型。泛型是调用者知道具体哪个类型,但是不透明类型是模块的设计者才知道具体是哪个类型。不透明的返回类型要有统一的类型。// 1. 三角形protocol Shape { func draw() -> String}struct Triangle: Sha...

2019-07-16 16:00:46 574

原创 泛型

泛型视图解决存储不同的数据类型,或者方法的入参是不同的数据类型。这样可以优雅的减少了很多不必要的重复代码。func exchangeTwoValue<T>(a:inout T, b: inout T){ let temp = a a = b b = temp}var a = 3var b = 4exchangeTwoValue(a: &a...

2019-07-16 11:18:39 91

原创 协议

协议语法protocol protocol1 { }protocol protocol2 { }class Test { }class Test1: Test, protocol1, protocol2 { }属性要求一定是var关键子的属性属性的名字要一致属性的类型要一致如果协议是get只读属性,那么协议的实现可以是只读属...

2019-07-15 14:09:38 119

原创 下标

下标简单使用struct TimesTable {    var muti = 1        subscript(index:Int) -> Int{        return index * muti    }}var timesTa...

2019-07-12 17:06:23 1069

原创 扩展

扩展基础swift的扩展使用关键字extensionswift的扩展相当于OC的分类,即只能新增方法不能新增存储属性。extension Double { var km: Double { return self * 1000 } var cm: Double { return self / 100.0 }...

2019-07-11 11:07:31 170

原创 类,结构体,枚举类型比较总结

枚举类型枚举类型只有case,没有常量变量(不一样地方)可以有实例方法,类型方法。可以有指定构造器,没有便利构造器(不一样地方)可以有可变实例方法(不一样地方)它的原始值类型只有Int,Doublt, Float, Character类型,默认是Int类型,Character类型要赋初始值结构体结构体中只有let,var变量(不一样地方)可以有实例方法,类型方法。可以有...

2019-07-11 10:08:56 199

原创 嵌套类型

struct BlackJackCard {enum Suit: Character {case spades = “♠”, hearts = “♡”, diamonds = “♢”, clubs = “♣”}enum Rank: Int { case two = 2, three, four, five, six, seven, eight, night, ten cas...

2019-07-10 15:00:21 309

原创 类型转换

类型判断操作符==,!=判断俩个值类型是否相等===,!==判断两个引用是否是一个内存地址is判断某个对象是否是某个类型class MediaItem { var name: String init(name: String) { self.name = name }}class Movie: MediaItem { var ...

2019-07-10 11:57:59 83

原创 错误处理

四种方式处理错误继续用throwing函数抛出错误(如果在一个方法内部不想处理错误,这时候想继续抛出错误可以用try去执行这个函数返回值类型是trows。)do,try,catch处理错误(一个函数可以在内部处理错误)将错误变为可选类型(想把抛出的错误转成可选类型,这时候用try?trowErrorMethod,它将会返回两种类型,一种是nil就是出错,还有一种是真正无错的返回值类型)...

2019-07-09 16:02:44 155

原创 可选链

可选链就是有些对象是可选类型的,这时候用这个对象调用方法或者属性的时候如果强制解包会发生运行时错误。所以用可选?来调用。这样就是形成一个链式的调用。class Person { var residence: Residence? }class Residence { var roomCount = 1}let aPerson = Person()//aP...

2019-07-09 13:44:02 220

原创 析构器

析构器写法是deinit{}析构器是在类被销毁之前自动调用的一个方法。析构器不允许我们手动调动。析构器不允许显示调用父类的析构器。析构器不存在重写,也不用加override关键字。如果子类和父类同时都写了析构器,那么先调用子类析构器,在去调用父类的析构器。class Bank { static var coinsInBank = 10_000 class func r...

2019-07-08 17:33:17 264

原创 构造过程

定义属性的三种方式直接赋初始值只写类型,在构造器中赋初始值当前是缺省值,以后一定有值。或者当前是缺省值,以后可能还是缺省值。class Test { //给属性赋默认值 var a = 0 //给属性类型,默认值在构造器中赋值 var b: Int //当前是缺省值, var c: Int?//当前是缺省值,以后可能还是缺省值 ...

2019-07-08 15:42:46 222

原创 继承

子类可以访问继承下来的属性,方法,下标子类不可以重写存储属性。可以重写计算属性,方法,下标。当标记为static类型的类类型后不可以重写,当标记为class类类型的可以重写。子类可以为继承下来的存储属性和计算属性添加属性观察器。属性观察器不能重写。class clsSuper { var a = 0 { didSet { print("cl...

2019-07-08 09:16:52 93

原创 方法

类外叫做函数,它没和其他类型关联。类内叫做方法,它和特定类型关联了。方法分为类型方法和实例方法。每个实例方法都有一个隐士的属性self,不必去特意使用self,但是有时候为了避免歧义要用self。枚举体,结构体中的实例方法改变属性值默认枚举体,结构体中的方法是不能改变自身属性值的。如果枚举体或者结构体中的方法要改变自身的值那就在方法前用mutating关键字struct P...

2019-07-04 18:00:38 98

原创 属性

属性有存储属性,计算属性存储属性包括常量存储属性,变量存储属性常量存储属性特性如果一个值类型变量被声明为let,那么这个变量下的所有都是常量不可以改。如果是一个引用类型被定义为let,那么这个类型下的常量不可改变,变量依然可以改变。struct Size { var a = 0}class React { var area = 0.0}let siz...

2019-07-04 14:47:58 113

原创 类和结构体

相同点都可以用变量属性存储值都可以用构造器初始化值都可以定义函数不同点类可以继承,结构体不能继承类有引用计数,结构体没有引用计数类是引用类型,结构体是值类型,结构体传递时候是值的拷贝结构体有成员逐一构造器,类没有简单使用struct Size { var width: Double = 0 var heigtht: Double = 0...

2019-07-03 14:34:29 148

原创 枚举类型

枚举的简单使用枚举,结构体,类的名字要大写它的名字可以被推断,所以第二次赋值时候之间可以省略枚举的名字。enum Direction { case north case south case east case west}var direction = Direction.northdirection = .east关联值枚举en...

2019-07-01 15:42:04 144

原创 闭包

前言函数类型作为变量,可以接收函数。函数类型作为返回值, 可以返回函数。函数类型作为参数,这就是闭包。闭包闭包的写法有很多如果是尾随闭包,可以把闭包放到小括号的后边。如果这时候小括号里边没有参数了可以去掉小括号参数类型和返回类型可以省略参数可以省略用$0,$1表示如果是单一的表达式可以省略return关键字var a = ["2", "3", "1", "0", ...

2019-07-01 11:32:22 82

原创 函数

当没有定义返回值时候,其实也是反回了一个空元组return ()数组通过中括号中的下标访问字典通过中括号中的key访问元组通过点后边跟下标或者key访问默认值参数默认值参数要放到后边,把没有默认值的参数放到前边。默认值参数函数在调用时候可以不赋值,这时候会用默认值。也可以赋值,用我们赋的值。func hello(person: String, age: Int = 18){...

2019-06-28 14:05:42 105

原创 控制流

for infor in 跨度遍历var a = [1,2,3,4,5,6,7,8,9]for item in stride(from: 0, to: 8, by: 2){ print(a[item])}for item in stride(from: 0, through: 8, by: 2) { print(a[item])}While循环whil...

2019-06-27 17:21:59 104

原创 集合类型

var a = [“1”:1, “2”:2, “3”:3]//1. 遍历获取key,valuefor (key,value) in a {print(“key = (key)—value = (value)”)}//2. 只是遍历keyfor key in a.keys {print(key)}//3. 只是遍历valuefor value in a.values {prin...

2019-06-26 16:43:30 126

原创 字符串和字符

多行文本字串\ :续航符 \n :换行符 文本中可以随意使用各种符号例如双引号等。//多行文本字串let a = """0,1,2,3,4,5.one,two,three,four,five"""print("a = \(a)")//续行符let b = """0,1,2,3,4,5.\one,two,three,four,five"""print("...

2019-06-25 17:36:20 180

原创 基本运算符

组合赋值运算符没有返回值//这种是错误的let b = a += 2两个对象判断是否是一个对象用 ===,!==来判断两个对象是否是一个对象,其实在判断内存地址.==和!=来判断基本数据类型class A { }class B { }var a = A()var b = B()var c = aif a === c { print(...

2019-06-25 10:36:48 109

原创 基础部分

如果你的代码中有不需要改变的值,请使用 let 关键字将它声明为常量。只将需要改变的值声明为变量var。在变量名后边加上冒号和空格来添加类型标注var red, green, blue: Double如果要在一行内执行多条语句要写分号分隔符let cat = "

2019-06-24 15:19:14 237

原创 swift速览

基本用法变量var a = 3var b: NSInteger? = 3var c: NSInteger?var d: NSIntegerd = 0数组字典var a = [1,2,3]var b: [Any?] = [4,5,"4"];var c = [String?]()var d = ["name":1, "type":2]var f: [String: ...

2019-06-22 16:52:34 115

原创 动态更改数据属性

动态添加数据属性<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>Vue 测试实例 - 菜鸟教程(runoob.com)</title> <script src="https://cdn.staticfile.org/vu...

2019-06-19 11:24:35 178

原创 ajax

get<template> <div id = "app"> {{info}} </div></template><script>import Axios from 'axios'export default { name: 'app', data () { return { ...

2019-06-18 17:39:38 149

原创 非越狱机器-越狱开发-工具的使用

前言额,端午期间偶然下载了一款游戏 ‘FC时代’,它是一款类似游戏模拟器一样的应用,里边提供了游戏应用商店,可以下载,游戏还是蛮多的。大部分都是童年时代小霸王游戏,都是童年的回忆啊。这些游戏画面,音质模拟的非常像以前小霸王插卡游戏,甚至以前动不动碰一下卡死机,这种现象也模拟出来了,玩着有时候会卡死。。。及时存档吧。。。就这样玩了玩,但是发现不充钱只能玩一个游戏。在玩第二个时候就出现弹框让去充...

2019-06-11 11:42:01 275

原创 混入

普通混入<body><div id="app"></div><script> var myMixin = { created:function () { this.start() }, methods:{ start:functio...

2019-06-06 16:58:01 129

原创 过渡与动画

过渡示例<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>test</title> <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"><...

2019-06-05 17:46:27 137

原创 路由

路由示例<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>test</title> <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"><...

2019-06-04 14:53:30 121

原创 约束冲突问题总结

如何避免产生约束问题1. 不要试图用masonry去更新xib的约束原因:masonry内部会判断如果是系统的约束就不处理,反而添加了新的约束,这样必然会出现约束冲突问题。2. tableHeaderView约束优先级要降低原因:我们要创建一个view让tableHeaderView=view,并在view上添加子的我们需要的那个整体view。然后约束时候要降低优先级。这样当tableHe...

2019-05-31 13:57:55 1388

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除