<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[UncleX的专栏]]></title><description><![CDATA[iOS持续学习中]]></description><link>https://blog.youkuaiyun.com/u010474185</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u010474185]]></copyright><item><title><![CDATA[Swift——自定义转场动画（一）]]></title><link>https://blog.youkuaiyun.com/u010474185/article/details/121612638</link><guid>https://blog.youkuaiyun.com/u010474185/article/details/121612638</guid><author>u010474185</author><pubDate>Mon, 29 Nov 2021 17:56:29 +0800</pubDate><description><![CDATA[弹窗转场/过度动画（Popover效果）
避免浪费大家时间，快速查看运行效果可以直接拉到最后看  【五.完整代码】  部分，如果要看递推逻辑，可以从前往后看。
一.基本设置
弹出一个控制器：系统提供了以下的方法
 @available(iOS 5.0, *)
    open func present(_ viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -&gt; Void)? = nil)


]]></description><category></category></item><item><title><![CDATA[小记：Swift中debugPrint()是运行在debug模式下吗？]]></title><link>https://blog.youkuaiyun.com/u010474185/article/details/121515996</link><guid>https://blog.youkuaiyun.com/u010474185/article/details/121515996</guid><author>u010474185</author><pubDate>Wed, 24 Nov 2021 15:31:28 +0800</pubDate><description><![CDATA[小记：Swift中debugPrint()是运行在debug模式下吗？
答案显然是否定的，但是有什么区别？
项目中一般都会沿用oc的习惯，使用自定义log，定义环境标识符，偶然翻看基础，突然想debugprint听起来不就是在debug模式下运行吗，还定义啥，验证一下，果不其然，不是想当然的，虽然很好验证，但是，良好的经验和习惯还是很重要的。。。
首先确定下debugprint 在 release模式下也会打印的事实：
class ViewController: UIViewController {

  ]]></description><category></category></item><item><title><![CDATA[Mac 搭建OpenGL开发环境（xcode+ glew + glfw）]]></title><link>https://blog.youkuaiyun.com/u010474185/article/details/120708963</link><guid>https://blog.youkuaiyun.com/u010474185/article/details/120708963</guid><author>u010474185</author><pubDate>Mon, 11 Oct 2021 19:12:02 +0800</pubDate><description><![CDATA[Mac 搭建OpenGL开发环境（xcode+ glew + glfw）
开始
第一步
在终端中通过brew来安装：
brew install glew
brew install glfw3

通常第一个会很顺利安装成功，第二个如果安装失败，更新homebrew
brew update

如果还是失败，可以重新安装homebrew的核心库
cd /usr/local/Homebrew/Library/Taps/homebrew/
rm -rf homebrew-core
git clone https://]]></description><category></category></item><item><title><![CDATA[xcode 15 cocoapod问题,xcodeproj 多版本问题]]></title><link>https://blog.youkuaiyun.com/u010474185/article/details/120430546</link><guid>https://blog.youkuaiyun.com/u010474185/article/details/120430546</guid><author>u010474185</author><pubDate>Thu, 23 Sep 2021 10:52:03 +0800</pubDate><description><![CDATA[xcode 15 cocoapod问题,xcodeproj 多版本问题pod init 报错gem list xcodeproj 多版本问题解决
pod init 报错
RuntimeError - [Xcodeproj] Unknown object version.
/Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.19.0/lib/xcodeproj/project.rb:227:in `initialize_from_file'
/Library/Ruby/Gems]]></description><category></category></item><item><title><![CDATA[swift 学习笔记(23)-属性(属性观察器)]]></title><link>https://blog.youkuaiyun.com/u010474185/article/details/53169999</link><guid>https://blog.youkuaiyun.com/u010474185/article/details/53169999</guid><author>u010474185</author><pubDate>Tue, 15 Nov 2016 12:17:24 +0800</pubDate><description><![CDATA[这里定义一个类,Number,一个属性为 max,代表最大值,先不看后面 willset 等的内容,如果只是一个普通的属性,当改变这个属性值的时候很好改变,随便赋值,不管后来的值是否比原来的值大还是小 
当有需求为,后面赋值比原来值大时,赋值成功,小于原来值的时候,保持原值,就需要价格判断了,就需要属性观察器了.即现在的代码class Number{
    // 定义一个最大值属性,给
    v]]></description><category></category></item><item><title><![CDATA[swift 学习笔记(23)-属性(计算属性)]]></title><link>https://blog.youkuaiyun.com/u010474185/article/details/53169966</link><guid>https://blog.youkuaiyun.com/u010474185/article/details/53169966</guid><author>u010474185</author><pubDate>Tue, 15 Nov 2016 12:10:42 +0800</pubDate><description><![CDATA[计算属性,前面已经提到过一些.大致和 oc 中的 set 和get 方法差不多,读取和赋值等//点struct Point{
    var x = 100
    var y = 100
}
var point = Point()
print(point)
// 宽高
struct Size{
    var width = 100
    var height = 100
}
var size]]></description><category></category></item><item><title><![CDATA[swift 学习笔记(22)-属性(存储属性/延迟属性)]]></title><link>https://blog.youkuaiyun.com/u010474185/article/details/53169934</link><guid>https://blog.youkuaiyun.com/u010474185/article/details/53169934</guid><author>u010474185</author><pubDate>Tue, 15 Nov 2016 12:03:42 +0800</pubDate><description><![CDATA[属性有很多类型,比如存储属性:赋值存值的,延迟属性,差不多和 oc 中的懒加载类似,计算属性,类型属性.还有属性观察器等 
存储属性class Person{
    // 属性由 var 修饰,如果类实例也是 var 修饰,则类实例的属性值可变
    var name = "zhangsan"
    var age = 23}//var 修饰类实例,属性值可变,类实例也可以重新赋值var pe]]></description><category></category></item><item><title><![CDATA[swift 学习笔记(21)-类和结构体]]></title><link>https://blog.youkuaiyun.com/u010474185/article/details/53169885</link><guid>https://blog.youkuaiyun.com/u010474185/article/details/53169885</guid><author>u010474185</author><pubDate>Tue, 15 Nov 2016 11:56:00 +0800</pubDate><description><![CDATA[// 类
class Person{    // 属性
    var name:String = "张三"
}// 结构体
struct Point{
    var x = 0
    var y = 0
}// 类和结构体-->swift 中叫做类型
// 对象和结构体对象--> 实例结构体,是值类型(不改变原来对象的值),类是引用类型(改变原对象的值),可以对比下前后值的变化let pers]]></description><category></category></item><item><title><![CDATA[swift学习笔记(20)-枚举]]></title><link>https://blog.youkuaiyun.com/u010474185/article/details/53169804</link><guid>https://blog.youkuaiyun.com/u010474185/article/details/53169804</guid><author>u010474185</author><pubDate>Tue, 15 Nov 2016 11:49:06 +0800</pubDate><description><![CDATA[当一个变量有固定的几个取值的时候,建议用枚举,比如说星期,月份等….// 枚举类型定义的数据类型的取值,只能是 case 后面的取值
enum weekDay:String{
    case Monday
    case Tuesday
    case Wedesday
    case Thursday
    case Friday
    case Saturday = "星期六"]]></description><category></category></item><item><title><![CDATA[swift 学习笔记(19)-闭包]]></title><link>https://blog.youkuaiyun.com/u010474185/article/details/53169758</link><guid>https://blog.youkuaiyun.com/u010474185/article/details/53169758</guid><author>u010474185</author><pubDate>Tue, 15 Nov 2016 11:43:59 +0800</pubDate><description><![CDATA[通过一个数组名称排序的例子,讲解闭包表达形式方式一var names = ["zhangsan","lisi","wangwu","zhaoliu"]
//数组的 sort 方法就是一个闭包names.sort { (s1, s2) -> Bool in
    return s1 > s2
}
print(names)方式二//返回的是一个 bool 类型的值,大于才会返回,如果不成立,就不返回,]]></description><category></category></item><item><title><![CDATA[swift 学习笔记(18)-函数]]></title><link>https://blog.youkuaiyun.com/u010474185/article/details/53161816</link><guid>https://blog.youkuaiyun.com/u010474185/article/details/53161816</guid><author>u010474185</author><pubDate>Mon, 14 Nov 2016 18:00:54 +0800</pubDate><description><![CDATA[函数 functionvar str = "Hello, playground"
// 定义函数 func 关键字
func printStr (){
    print(str)
}// 调用函数,函数名+()printStr()
有参数有返回值的函数// 传入一个字符串,返回字符串的字符的个数// 函数的声明 + (参数名:参数类型)->(返回值类型)
// str 即是外部参数,也是内部参数]]></description><category></category></item><item><title><![CDATA[swift 学习笔记(17)-guard]]></title><link>https://blog.youkuaiyun.com/u010474185/article/details/53161643</link><guid>https://blog.youkuaiyun.com/u010474185/article/details/53161643</guid><author>u010474185</author><pubDate>Mon, 14 Nov 2016 17:45:27 +0800</pubDate><description><![CDATA[guard语句  条件判断语句,和 if 有点相反的意思// 原来的 if 语句执行for i in 1...10{
    if i > 5 && i < 8{
        print(i)
        print("正常逻辑,如果满足条件,执行这里的代码")
    }
}guard语句://break 结束大循环
for i in 1...10{
    guard i > 5 &&]]></description><category></category></item><item><title><![CDATA[swift 学习笔记(16)-switch 语句]]></title><link>https://blog.youkuaiyun.com/u010474185/article/details/53161565</link><guid>https://blog.youkuaiyun.com/u010474185/article/details/53161565</guid><author>u010474185</author><pubDate>Mon, 14 Nov 2016 17:39:44 +0800</pubDate><description><![CDATA[swich 语句 
选择情况比较多的时候,一个情况可以设定为一个 case比如判断今天是星期几var week = 6
switch week  {
var week = 6
switch week  {
case 1:
    print("星期一")
case 2:
    print("星期二")
case 3:
    print("星期三")
case 4:
    print("星期四"]]></description><category></category></item><item><title><![CDATA[swift 学习笔记(15)-if语句]]></title><link>https://blog.youkuaiyun.com/u010474185/article/details/53161389</link><guid>https://blog.youkuaiyun.com/u010474185/article/details/53161389</guid><author>u010474185</author><pubDate>Mon, 14 Nov 2016 17:29:47 +0800</pubDate><description><![CDATA[if 语句 
- 条件不用再加() 
- 非零就是真 不适用了,不能再用简单的非0数字代表真前面其实已经用过了,还是判断成绩的例子吧.var score = 80
if score > 90 {
    print("youxiu")
}else if score > 80 {
    print("lianghao")
}else if score > 60{
    print("jige")]]></description><category></category></item><item><title><![CDATA[swift 学习笔记(14)-while 循环]]></title><link>https://blog.youkuaiyun.com/u010474185/article/details/53161354</link><guid>https://blog.youkuaiyun.com/u010474185/article/details/53161354</guid><author>u010474185</author><pubDate>Mon, 14 Nov 2016 17:27:06 +0800</pubDate><description><![CDATA[涉及到 while 循环的,基本就两个比较常用,先循环后判断,和先判断后循环 
不过不是用的 do 关键字,而是用的 repeat基本使用//
var number = 0
// 先判断,后执行
while number < 10{
    print(number)
    number += 1}
// 先执行,后判断
repeat{
    print(number)
    number +]]></description><category></category></item><item><title><![CDATA[swift 学习笔记(13)-for循环]]></title><link>https://blog.youkuaiyun.com/u010474185/article/details/53161247</link><guid>https://blog.youkuaiyun.com/u010474185/article/details/53161247</guid><author>u010474185</author><pubDate>Mon, 14 Nov 2016 17:20:55 +0800</pubDate><description><![CDATA[for 循环 
示例:for  i in 0...10{
    print(i)
}// 通过 _ 忽略遍历的值,可以没有变量,用_代替for _ in 0...10{
    print("tes")
}数组遍历//遍历数组
var names = ["name0","name1","name2","name3"]
for name in names{
    print(name)
}// 有]]></description><category></category></item><item><title><![CDATA[swift 学习笔记(12)-区间运算符]]></title><link>https://blog.youkuaiyun.com/u010474185/article/details/53161091</link><guid>https://blog.youkuaiyun.com/u010474185/article/details/53161091</guid><author>u010474185</author><pubDate>Mon, 14 Nov 2016 17:10:39 +0800</pubDate><description><![CDATA[区间运算符(…),一般用于 for 循环 //1~10 包括10
1...10
for index in 1...10{
    print( index)
}//半开区间运算符
//1~10 不包括10
for index in 1..<10{
    print(index)
}var names = ["name1","name2","name3","name4","name5"]
names]]></description><category></category></item><item><title><![CDATA[swift 学习笔记(11)-空合运算符]]></title><link>https://blog.youkuaiyun.com/u010474185/article/details/53161016</link><guid>https://blog.youkuaiyun.com/u010474185/article/details/53161016</guid><author>u010474185</author><pubDate>Mon, 14 Nov 2016 17:05:42 +0800</pubDate><description><![CDATA[空合运算符:  ?? (两个问号) 
运算方式:一个可变类型的值,如果有值,就把本身赋值给一个常量或者变量,如果为 nil,就把 ?? 右边的值赋值过去这里配合三目运算符做举例说明
//第一种var name:String?
if name != nil {
    //不为空时强制解包,不会报错
    name!
}else {
    print("name = nil");
}// 第二种]]></description><category></category></item><item><title><![CDATA[swift 学习笔记(10)-三目运算符]]></title><link>https://blog.youkuaiyun.com/u010474185/article/details/53160834</link><guid>https://blog.youkuaiyun.com/u010474185/article/details/53160834</guid><author>u010474185</author><pubDate>Mon, 14 Nov 2016 16:56:28 +0800</pubDate><description><![CDATA[三目运算符 
三目运算符由问号和冒号组成,先是一个表达式,判断语句,如果成立,就执行冒号前面的,如果不成立就执行冒号后面的,一对二的选择判断语句比如:一个小伙得了一百分let score = 100如果90以上算优秀,90分一下算良好var level:String?if score > 90 {
    level = "优秀"
}else{
    level = "良好"
}以前是上面那么判断]]></description><category></category></item><item><title><![CDATA[swift 学习笔记(9)-比较运算符]]></title><link>https://blog.youkuaiyun.com/u010474185/article/details/53160687</link><guid>https://blog.youkuaiyun.com/u010474185/article/details/53160687</guid><author>u010474185</author><pubDate>Mon, 14 Nov 2016 16:48:29 +0800</pubDate><description><![CDATA[常用的比较运算符,> < >= <= … 
建议在 playground 的中边敲边看效果,因为是实时输出的,所以效果比较明显,逻辑上没什么难度,只是简单的比较而已//比较元组:从左到右依次比较,比较出结果就结束var zhangsan = (age:18,name:"zhangan")
var lisi = (age:20,name:"lisi")zhangsan > lisi"abc">"bbc]]></description><category></category></item></channel></rss>