<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[b_8196_p的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/b_8196_p</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; b_8196_p]]></copyright><item><title><![CDATA[iosday2----stackView、Label、Gesture]]></title><link>https://blog.youkuaiyun.com/b_8196_p/article/details/111245694</link><guid>https://blog.youkuaiyun.com/b_8196_p/article/details/111245694</guid><author>b_8196_p</author><pubDate>Wed, 16 Dec 2020 11:12:13 +0800</pubDate><description><![CDATA[Stackview
它继承于UIView，用来管理一行或一列视图的布局(堆叠视图的控制器类视图，所谓堆叠视图时一种平铺式的线性布局方式，不可重叠，布局方向也不可交错.
Axis
stack 的朝向，只有垂直或水平
Distribution
管理的视图在沿着其轴向上的布局
如果减去所有的spacing，所有arrangedSubview的固有尺寸(intrinsicContentSize)之和不能填满StackView，那么就按照Hugging的优先级将其拉伸。反之，如果超出StackView的尺寸则按Com]]></description><category></category></item><item><title><![CDATA[ios开发---AutoLayout]]></title><link>https://blog.youkuaiyun.com/b_8196_p/article/details/111182398</link><guid>https://blog.youkuaiyun.com/b_8196_p/article/details/111182398</guid><author>b_8196_p</author><pubDate>Mon, 14 Dec 2020 18:12:13 +0800</pubDate><description><![CDATA[布局约束：
1.页边间距约束
左边距和右边距。
2.水平间距约束
3.等宽约束
4.方向比例约束
5.实践布局约束

]]></description><category></category></item><item><title><![CDATA[swift基础day7---泛型、不透明类型、自动引用计数、内存安全、访问控制]]></title><link>https://blog.youkuaiyun.com/b_8196_p/article/details/111032018</link><guid>https://blog.youkuaiyun.com/b_8196_p/article/details/111032018</guid><author>b_8196_p</author><pubDate>Fri, 11 Dec 2020 15:18:19 +0800</pubDate><description><![CDATA[泛型能根据自定义的需求，编写出适用于任意类型的、灵活可复用的函数及类型。
泛型函数
泛型版本的函数使用占位符类型名（这里叫做 T ），而不是 实际类型名（例如 Int、String 或 Double），占位符类型名并不关心 T 具体的类型，但它要求 a 和b 必须是相同的类型，T 的实际类型由每次调用 swapTwoValues(:???? 来决定。
//泛型函数
func swapTwoValues&lt;T&gt;(_ a: inout T, _ b: inout T){
    let tempora]]></description><category></category></item><item><title><![CDATA[swift基础day7---扩展、协议]]></title><link>https://blog.youkuaiyun.com/b_8196_p/article/details/111025809</link><guid>https://blog.youkuaiyun.com/b_8196_p/article/details/111025809</guid><author>b_8196_p</author><pubDate>Thu, 10 Dec 2020 23:27:21 +0800</pubDate><description><![CDATA[扩展（extension）
扩展可以给一个类型添加新的功能，但是不能重写已经存在的功能。扩展可以实现：

添加计算型实例属性和计算型类属性
定义实例方法和类方法 提供新的构造器
定义下标
定义和使用新的嵌套类型
使已经存在的类型遵循一个协议
对一个现有的类型，如果你定义了一个扩展来添加新的功能，那么这个类型的所有实例都可以使用这个新功能，包括那些在扩展定义之前就存在的实例。

计算型属性扩展：
扩展可以添加新的计算属性，但是它们不能添加存储属性，或向现有的属性添加属性观察者。
构造器扩展
扩展可以给一个类添]]></description><category></category></item><item><title><![CDATA[swift基础day6---类型转换、嵌套类型]]></title><link>https://blog.youkuaiyun.com/b_8196_p/article/details/110959083</link><guid>https://blog.youkuaiyun.com/b_8196_p/article/details/110959083</guid><author>b_8196_p</author><pubDate>Thu, 10 Dec 2020 22:52:59 +0800</pubDate><description><![CDATA[类型转换在 Swift 中使用 is 和 as ，分别提供了一种方式去检查值的类型或者转换它的类型。
为类型转换定义类层次
将类型转换用在类和子类的层次结构上，检查特定类实例的类型并且转换这个类实例的类型成为这个层次结构中的其他类型.
class MediaItem {
    var name: String
    init(name: String) {
        self.name = name
    }
}
class Movie: MediaItem {
    var director]]></description><category></category></item><item><title><![CDATA[swift基础day6---错误处理]]></title><link>https://blog.youkuaiyun.com/b_8196_p/article/details/110956181</link><guid>https://blog.youkuaiyun.com/b_8196_p/article/details/110956181</guid><author>b_8196_p</author><pubDate>Thu, 10 Dec 2020 18:17:03 +0800</pubDate><description><![CDATA[错误处理
Swift 在运行时提供了抛出、捕获、传递和操作可恢复错误等支持。Swift 中的错误处理涉及到错误处理模式与Cocoa有关。
表示与抛出错误
遵循Error 协议。
//表示与抛出错误
enum VendingMachineError: Error {
    case invalidSelection   //选择无效
    case insufficientFunds(coinsNeeded: Int)  //金额不足
    case outOfstock    //缺货
}
throw]]></description><category></category></item><item><title><![CDATA[swift基础day6---可选链]]></title><link>https://blog.youkuaiyun.com/b_8196_p/article/details/110954455</link><guid>https://blog.youkuaiyun.com/b_8196_p/article/details/110954455</guid><author>b_8196_p</author><pubDate>Thu, 10 Dec 2020 16:24:28 +0800</pubDate><description><![CDATA[可选链式调用
可选链式调用可以应用于任意类型，并且能检查调用是否成功。
使用可选链式调用代替强制展开
可选链式调用的返回结果与原本的返回结果具有相同的类型，但是被包装成了一个可选值。（类似于：Int?）
//使用可选链式调用代替强制展开
class Person {
    var residence: Residence?   //如果使用！，residence没有值会出现运行错误
}

class Residence {
    var numberOfRooms = 1
}
let john = Pe]]></description><category></category></item><item><title><![CDATA[swift基础day6----构造方法与析构过程]]></title><link>https://blog.youkuaiyun.com/b_8196_p/article/details/110945856</link><guid>https://blog.youkuaiyun.com/b_8196_p/article/details/110945856</guid><author>b_8196_p</author><pubDate>Thu, 10 Dec 2020 15:24:31 +0800</pubDate><description><![CDATA[存储属性的初始赋值
类和结构体在创建实例时，必须为所有存储型属性设置合适的初始值。存储型属性的值不能处于一个未知的状态。可以在构造器中为存储型属性设置初始值，也可以在定义属性时分配默认值。
构造器
构造器在创建某个特定类型的新实例时被调用。构造器本身的作用，只是为了确保对象能被正确构造。
struct Fahreheit {
    var temperature: Double
    init() {
        temperature = 32.0
    }
}
var f = Fahrehei]]></description><category></category></item><item><title><![CDATA[swift基础day5---继承]]></title><link>https://blog.youkuaiyun.com/b_8196_p/article/details/110824160</link><guid>https://blog.youkuaiyun.com/b_8196_p/article/details/110824160</guid><author>b_8196_p</author><pubDate>Mon, 07 Dec 2020 18:08:06 +0800</pubDate><description><![CDATA[//继承 Inheritance
class Transpotation {
    var petrol: Int = 10  //油量
    //行驶
    func drive() {
        //具体由子类实现
        if petrol == 0 {
            self.addPetrol()
        }
    }
    //加油
    func addPetrol() {
        petrol += 10
    }
}

//子类
cla]]></description><category></category></item><item><title><![CDATA[swift基础day5---面向对象（封装、多态）]]></title><link>https://blog.youkuaiyun.com/b_8196_p/article/details/110822955</link><guid>https://blog.youkuaiyun.com/b_8196_p/article/details/110822955</guid><author>b_8196_p</author><pubDate>Mon, 07 Dec 2020 18:03:03 +0800</pubDate><description><![CDATA[封装
把隐藏属性、方法与方法实现细节的过程称为封装
目的：1.使用数据更加方便，2.为了数据保护。
隐藏属性和方法
使用访问控制修饰符将类和其属性方法封装起来。
修饰符：

private:所修饰的属性或者方法只能在当前 Swift 源文件里可以访问，在别的文件里访问会出错.
public:所修饰的属性或者方法对于引用了该文件或者模块的文件来讲，都能访问这些属性和方法。一般来说 public 的出现是为了 API 开发而设置。
internal:默认的访问权限。所修饰的属性或者方法在源代码所在的整个模块都可]]></description><category></category></item><item><title><![CDATA[swift基础day5---方法]]></title><link>https://blog.youkuaiyun.com/b_8196_p/article/details/110818534</link><guid>https://blog.youkuaiyun.com/b_8196_p/article/details/110818534</guid><author>b_8196_p</author><pubDate>Mon, 07 Dec 2020 15:57:24 +0800</pubDate><description><![CDATA[实例方法是被某个类型的实例调用的方法，类型方法是定义在类型本身上调用的方法。
实例方法
属于某个特定类、结构体或者枚举类型实例的方法。提供访问和修改实例属性的方法或提供与实例目的相关的功能，并以此来支撑实例的功能。
实例方法能够隐式访问它所属类型的所有的其他实例方法和属性。只能被它所属的类的某个特定实例调用，并且不能脱离于现存的实例而被调用。
class Counter {
    var count = 0
    //实例方法
    func increment() {
        count +]]></description><category></category></item><item><title><![CDATA[swift基础day5---属性]]></title><link>https://blog.youkuaiyun.com/b_8196_p/article/details/110791238</link><guid>https://blog.youkuaiyun.com/b_8196_p/article/details/110791238</guid><author>b_8196_p</author><pubDate>Mon, 07 Dec 2020 14:11:48 +0800</pubDate><description><![CDATA[属性
计算属性：直接计算（而不是存储）值，可以用于类、结构体和枚举。
存储属性：将常量和变量存储为实例的一部分，只能用于类和结构体。
类型属性：与类型本身关联。

属性观察器可以添加到类本身定义的存储属性上，也可以添加到从父类继承的属性上。
可以利用属性包装器来复用多个属性的 getter 和 setter 中的代码
存储属性：

struct FixedLengthRange {
    var firstValue: Int
    let length: Int
}
var rangeOfThreeI]]></description><category></category></item><item><title><![CDATA[swift基础day4---结构体和类]]></title><link>https://blog.youkuaiyun.com/b_8196_p/article/details/110788977</link><guid>https://blog.youkuaiyun.com/b_8196_p/article/details/110788977</guid><author>b_8196_p</author><pubDate>Sun, 06 Dec 2020 23:49:43 +0800</pubDate><description><![CDATA[结构体和类对比
共同点：

定义属性用于存储值
定义方法用于提供功能
定义下标操作用于通过下标语法访问它们的值
定义构造器用于设置初始值
通过扩展以增加默认实现之外的功能
遵循协议以提供某种标准功能
不同点：优先使用结构体，因为它们更容易理解，仅在适当或必要时才使用类。
继承允许一个类继承另一个类的特征
类型转换允许在运行时检查和解释一个类实例的类型
析构器允许一个类实例释放任何其所被分配的资源
引用计数允许对一个类的多次引用
类实例没有默认的成员逐一构造器
命名：类和结构体命名使用大写，属性和方法使用小写]]></description><category></category></item><item><title><![CDATA[swift基础day4---枚举]]></title><link>https://blog.youkuaiyun.com/b_8196_p/article/details/110743969</link><guid>https://blog.youkuaiyun.com/b_8196_p/article/details/110743969</guid><author>b_8196_p</author><pubDate>Sun, 06 Dec 2020 21:43:01 +0800</pubDate><description><![CDATA[枚举（enumerations）
枚举成员可以指定任意类型的关联值存储到枚举成员中,枚举是一等类型。枚举的特性：计算属性，提供枚举值的附加信息，实例方法，提供和枚举值相关联的功能，也可以定义构造函数，来提供一个初始值，可以在原始实现的基础上扩展它们的功能，提供标准功能。
以一个大写字母开头。给枚举类型起一个单数名字而不是复数名字,以便于：var directionToHead = CompassPoint.west
枚举成员的遍历
（1）令枚举遵循 CaseIterable 协议。Swift 会生成一个 a]]></description><category></category></item><item><title><![CDATA[swift基础day4---闭包]]></title><link>https://blog.youkuaiyun.com/b_8196_p/article/details/110734481</link><guid>https://blog.youkuaiyun.com/b_8196_p/article/details/110734481</guid><author>b_8196_p</author><pubDate>Sun, 06 Dec 2020 16:26:26 +0800</pubDate><description><![CDATA[闭包
闭包的结构
函数包含：函数名，参数列表，返回值，函数体。
闭包：{(参数列表) -&gt;fan返回值 in  闭包体}
//标准函数
func myFunc(param: Int) -&gt; Int{
    return param * param
}
//闭包
let myClosures = {(param: Int) -&gt; Int in 
	return param * param
}
myFunc(param: 3)   //调用函数
myClosures(3)  //调用闭包

]]></description><category></category></item><item><title><![CDATA[swift基础day4---函数]]></title><link>https://blog.youkuaiyun.com/b_8196_p/article/details/110680306</link><guid>https://blog.youkuaiyun.com/b_8196_p/article/details/110680306</guid><author>b_8196_p</author><pubDate>Sun, 06 Dec 2020 14:23:34 +0800</pubDate><description><![CDATA[函数与闭包函数函数类型闭包
函数有名称的功能代码块，闭包在大多数情况下没有名称的功能代码块。
函数
每个函数都有一个由函数的参数值类型和返回值类型组成的类型.
内部命名在函数实现时使用，外部命名在函数调用时使用。
在某参数类型的后面追加符号"…"，会将此参数设置为数量可变，传递的值会被包装成集合类型赋值给相应参数，并且传递的参数类型必须相同，并且可以传递多组数了可变的参数，不同参数之间参数类型可以不同。
参数传递：如果传递的是值类型的参数，那么参数值在传递斤函数内部时会将原值拷贝为一份常量，且在函数内不可以]]></description><category></category></item><item><title><![CDATA[swift基础day3]]></title><link>https://blog.youkuaiyun.com/b_8196_p/article/details/110622848</link><guid>https://blog.youkuaiyun.com/b_8196_p/article/details/110622848</guid><author>b_8196_p</author><pubDate>Fri, 04 Dec 2020 16:45:24 +0800</pubDate><description><![CDATA[1.for循环与while循环（Control Flow: For-In Loops, While Loops）
//for循环
for index in 1...3{
    print("\(index) times 6 is \(index * 6)")
}
let num1 = 0
let num2 = 20
for index in stride(from: num1, to: num2, by: 5){
    print(index) //0,5,10,15不包含20
} //stride(.]]></description><category></category></item><item><title><![CDATA[swift基础day2]]></title><link>https://blog.youkuaiyun.com/b_8196_p/article/details/110536460</link><guid>https://blog.youkuaiyun.com/b_8196_p/article/details/110536460</guid><author>b_8196_p</author><pubDate>Thu, 03 Dec 2020 23:39:06 +0800</pubDate><description><![CDATA[1.Strings and Characters
字符串字面量的特殊符号：
转义字符 \0(空字符)、\(反斜线)、\t(水平制表符)、\n(换行符)、\r(回车符)、"(双引号)、’(单引号)。
Unicode 标量，写成 \u{n}(u 为小写)，其中 n 为任意一到八位十六进制数且可用的 Unicode 位码。
字符串是值类型
每一个 Swift 的 Character 类型代表一个可扩展的字形群。而一个可扩展的字形群构成了人类可读的单个字符，它由一个或多个（当组合时） Unicode 标量的序列组成]]></description><category></category></item><item><title><![CDATA[swift基础day1]]></title><link>https://blog.youkuaiyun.com/b_8196_p/article/details/110476413</link><guid>https://blog.youkuaiyun.com/b_8196_p/article/details/110476413</guid><author>b_8196_p</author><pubDate>Wed, 02 Dec 2020 16:40:06 +0800</pubDate><description><![CDATA[1.Xcode playground
如果想创建 iOS playground 则需要引入 UIKit :
import UIKit

2.常量和变量（Constants and Variables）
let定义常量，定义完成后不可修改
var定义变量，可修改。
3.常量和变量的类型： Int, Double, Bool, Tuple

Int：
Double：
Float：
Bool:True,False,nil
Tuple:tuple用于传递复合类型的数据，介于基础类型和类之间，复杂的数据通过类（或结构]]></description><category></category></item><item><title><![CDATA[使用描述符对实例属性做类型检查]]></title><link>https://blog.youkuaiyun.com/b_8196_p/article/details/109616016</link><guid>https://blog.youkuaiyun.com/b_8196_p/article/details/109616016</guid><author>b_8196_p</author><pubDate>Wed, 11 Nov 2020 11:49:01 +0800</pubDate><description><![CDATA[需要属性_get_、set、_delete_方法，在_set_方法内使用isinstance函数做检查。
class Attr(object):
    def __init__(self, name, type_):
        self.name = name
        self.type_ = type_
    def __get__(self, instance, owner):
        # print('in__get__', instance, owner)
        ]]></description><category></category></item></channel></rss>