<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[SoftwareDoger的博客]]></title><description><![CDATA[参天大树生千年，只做向日第一叶，一点一点汲知识，暖人暖心开先河！]]></description><link>https://blog.youkuaiyun.com/SoftwareDoger</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; SoftwareDoger]]></copyright><item><title><![CDATA[Xib添加scrollView再添加subView约束不报错的两种方式]]></title><link>https://blog.youkuaiyun.com/SoftwareDoger/article/details/132897110</link><guid>https://blog.youkuaiyun.com/SoftwareDoger/article/details/132897110</guid><author>SoftwareDoger</author><pubDate>Fri, 15 Sep 2023 10:48:18 +0800</pubDate><description><![CDATA[Xib 添加scrollView报错问题解决]]></description><category></category></item><item><title><![CDATA[iOS系统版本较高同时Xcode版本较低真机调试遇到的问题]]></title><link>https://blog.youkuaiyun.com/SoftwareDoger/article/details/124295294</link><guid>https://blog.youkuaiyun.com/SoftwareDoger/article/details/124295294</guid><author>SoftwareDoger</author><pubDate>Wed, 20 Apr 2022 13:27:19 +0800</pubDate><description><![CDATA[iOS系统版本较高同时Xcode版本较低真机调试容易出现如下报错：
1.真机调试提示Please reconnect the device问题解决
2.Please check the connection to the device, and review all errors in the    Devices and Simulators window
这两个报错的出现，重启手机可能有用，但最重要的是要：
到https://github.com/filsv/iPhoneOSDeviceSupport找]]></description><category></category></item><item><title><![CDATA[Swift 模糊效果局部挖空]]></title><link>https://blog.youkuaiyun.com/SoftwareDoger/article/details/124279287</link><guid>https://blog.youkuaiyun.com/SoftwareDoger/article/details/124279287</guid><author>SoftwareDoger</author><pubDate>Tue, 19 Apr 2022 17:34:01 +0800</pubDate><description><![CDATA[Swift 模糊效果局部挖空]]></description><category></category></item><item><title><![CDATA[修改状态栏背景色]]></title><link>https://blog.youkuaiyun.com/SoftwareDoger/article/details/117563272</link><guid>https://blog.youkuaiyun.com/SoftwareDoger/article/details/117563272</guid><author>SoftwareDoger</author><pubDate>Fri, 04 Jun 2021 15:38:15 +0800</pubDate><description><![CDATA[//MARK:- 修改状态栏背景色
var statusBarUIView: UIView? {
    if #available(iOS 13.0, *) {
        let tag = 123456
        let keyWindow = UIApplication.shared.connectedScenes
            .map({$0 as? UIWindowScene})
            .compactMap({$0})
            .firs]]></description><category></category></item><item><title><![CDATA[Swift -- 将本地生成的UIImage进行持久化保存（存到文件中fileManager.createFile）]]></title><link>https://blog.youkuaiyun.com/SoftwareDoger/article/details/107538730</link><guid>https://blog.youkuaiyun.com/SoftwareDoger/article/details/107538730</guid><author>SoftwareDoger</author><pubDate>Thu, 23 Jul 2020 15:47:20 +0800</pubDate><description><![CDATA[//在相册或者拍照的代理方法中

struct ImageSource {
    var img: UIImage
    var title: String
    
    init(img: UIImage, title: String) {
        self.img = img
        self.title = title
    }
}

    var familyImgsSource:[ImageSource] = [] {
        didSet{
         ]]></description><category></category></item><item><title><![CDATA[Swift -- UICollectionViewLayout自定义，满足你不同的布局需要]]></title><link>https://blog.youkuaiyun.com/SoftwareDoger/article/details/106729601</link><guid>https://blog.youkuaiyun.com/SoftwareDoger/article/details/106729601</guid><author>SoftwareDoger</author><pubDate>Sat, 13 Jun 2020 11:30:46 +0800</pubDate><description><![CDATA[项目中需要用到UICollectionView的地方非常多，这样我们常常要写满足不同布局需要的cell的布局方式，比如在一个BaseVC中，我们设置代理数据源什么的，然后在ViewDidLoad中开始写一堆的布局代码，这样显的VC中的代码很乱，我们也没有一个清晰的认识，我常会单独创建一个继承自UICollectionViewLayout的类FamilyFlowLayout，代码如下：


import UIKit

class FamilyFlowLayout: UICollectionViewLa...]]></description><category></category></item><item><title><![CDATA[Swift -- Chirp第三方播放本地音频文件]]></title><link>https://blog.youkuaiyun.com/SoftwareDoger/article/details/106668502</link><guid>https://blog.youkuaiyun.com/SoftwareDoger/article/details/106668502</guid><author>SoftwareDoger</author><pubDate>Wed, 10 Jun 2020 16:05:00 +0800</pubDate><description><![CDATA[//在项目中避免不了要在恰当的位置适时的播放一小段段或者极其简短的声音，比如点击按钮时的卡卡声，error出现弹出view时的警告声，点击拍照的咔嚓声，电量不足的噔噔声，QQ来信时的滴滴声，等等，不胜枚举，用法列举如下：

1.github上面搜索Swift对应的Chirp，然后进行pod操作，或者直接把源文件拖到工程中也行，很小的一个第三方

2.创建一个Sound类，代码如下：

import UIKit
enum SoundType: String {
    case click = "click.]]></description><category></category></item><item><title><![CDATA[Swift -- AVPlayerViewController播放本地视频并且通知重复播放]]></title><link>https://blog.youkuaiyun.com/SoftwareDoger/article/details/106572415</link><guid>https://blog.youkuaiyun.com/SoftwareDoger/article/details/106572415</guid><author>SoftwareDoger</author><pubDate>Fri, 05 Jun 2020 16:41:02 +0800</pubDate><description><![CDATA[import AVKit

    override func viewDidLoad() {
        super.viewDidLoad()
        self.addPlayerView()
    }
    
    func addPlayerView(){
        guard let url = Bundle.main.url(forResource: "720p", withExtension: "mov") else {
            return
     ]]></description><category></category></item><item><title><![CDATA[Swift -- delay(封装一个延迟执行的方法)]]></title><link>https://blog.youkuaiyun.com/SoftwareDoger/article/details/106443881</link><guid>https://blog.youkuaiyun.com/SoftwareDoger/article/details/106443881</guid><author>SoftwareDoger</author><pubDate>Sat, 30 May 2020 17:08:51 +0800</pubDate><description><![CDATA[//在iOS开发中 有许多工作需要延迟执行，应用场景会有很多，我就不一一举例了
// MARK: - 延时函数
typealias Task = (_ cancel : Bool) -&gt; ()

@discardableResult
func delay(_ time:TimeInterval, task:@escaping () -&gt; ()) -&gt; Task? {
    func dispatch_later(_ block:@escaping () -&gt; ()) {
     ]]></description><category></category></item><item><title><![CDATA[Swift --棒棒糖5 --Xcode文件目录Bundle中有大量的图片加载时内存暴涨的解决方式]]></title><link>https://blog.youkuaiyun.com/SoftwareDoger/article/details/106147628</link><guid>https://blog.youkuaiyun.com/SoftwareDoger/article/details/106147628</guid><author>SoftwareDoger</author><pubDate>Fri, 15 May 2020 18:36:05 +0800</pubDate><description><![CDATA[//Xcode Bundle文件中大量的图片： 比如
    var images:[String] = ["LoginHintOverlays1.0-NoButtons-1","LoginHintOverlays1.0-NoButtons-2","LoginHintOverlays1.0-NoButtons-3","LoginHintOverlays1.0-NoButtons-4","LoginHintOverlays1.0-NoButtons-5","LoginHintOverlays1.0-NoBut]]></description><category></category></item><item><title><![CDATA[Swift --棒棒糖4--判断当前的控制器是怎么来的]]></title><link>https://blog.youkuaiyun.com/SoftwareDoger/article/details/106019503</link><guid>https://blog.youkuaiyun.com/SoftwareDoger/article/details/106019503</guid><author>SoftwareDoger</author><pubDate>Sat, 09 May 2020 15:11:20 +0800</pubDate><description><![CDATA[extension UIViewController {
        var isModal: Bool {
            let presentingIsModal = presentingViewController != nil
            let presentingIsNavigation = navigationController?.presentingViewController?.presentedViewController == navigationC...]]></description><category></category></item><item><title><![CDATA[Swift --棒棒糖3--数据库增删改查操作(GRDB)]]></title><link>https://blog.youkuaiyun.com/SoftwareDoger/article/details/105899242</link><guid>https://blog.youkuaiyun.com/SoftwareDoger/article/details/105899242</guid><author>SoftwareDoger</author><pubDate>Sun, 03 May 2020 11:17:55 +0800</pubDate><description><![CDATA[//创建两个表
1.class axStudent: Record {
  
    var studentID: Int64 = 0
    var studentName: String = ""
    var studentAge: Double = 0
    var studentSex: Int = 0
    var studentAddress: String = ""
}

2...]]></description><category></category></item><item><title><![CDATA[Swift --棒棒糖2--filter,map,compactMap,reduce,sort高阶函数]]></title><link>https://blog.youkuaiyun.com/SoftwareDoger/article/details/105875877</link><guid>https://blog.youkuaiyun.com/SoftwareDoger/article/details/105875877</guid><author>SoftwareDoger</author><pubDate>Fri, 01 May 2020 14:05:18 +0800</pubDate><description><![CDATA[端到端]]></description><category></category></item><item><title><![CDATA[Swift --棒棒糖1--判断字符串中有没有元素]]></title><link>https://blog.youkuaiyun.com/SoftwareDoger/article/details/105864742</link><guid>https://blog.youkuaiyun.com/SoftwareDoger/article/details/105864742</guid><author>SoftwareDoger</author><pubDate>Thu, 30 Apr 2020 16:48:35 +0800</pubDate><description><![CDATA[//如下方法： 说白了其实就是判断 string.
    func hasElement(str: String?, excludeNull: Bool = false) -&gt; Bool {
        if let string = str {
            if excludeNull {
                if !string.isEmpty &amp;&...]]></description><category></category></item><item><title><![CDATA[Swift -- 屏幕的分辨率，图片的像素，像素是否固定大小，屏幕的尺寸，来一一解惑]]></title><link>https://blog.youkuaiyun.com/SoftwareDoger/article/details/105767745</link><guid>https://blog.youkuaiyun.com/SoftwareDoger/article/details/105767745</guid><author>SoftwareDoger</author><pubDate>Sun, 26 Apr 2020 14:24:40 +0800</pubDate><description><![CDATA[送给小白：


像素： 图片的属性，我们可以看到公交上面滚动播放字体的屏幕，你细看的话其实是一颗颗LED的灯组成的，一个像素就是一个LED灯泡，一张图片其实就是很多个不同颜色的点组成的，这个店就是像素
分辨率： 设备屏幕的属性，iPhone6的分辨率是1334 x 750, 指的就是iPhone横向有750像素，纵向有1334像素
屏幕的尺寸：经常说iPhone6是4.7英寸的屏幕，XR是6.1英...]]></description><category></category></item><item><title><![CDATA[Swift-- UIViewController中使用到的willRotate父类方法]]></title><link>https://blog.youkuaiyun.com/SoftwareDoger/article/details/105748583</link><guid>https://blog.youkuaiyun.com/SoftwareDoger/article/details/105748583</guid><author>SoftwareDoger</author><pubDate>Sat, 25 Apr 2020 13:44:21 +0800</pubDate><description><![CDATA[//UIViewController的willRotate父类方法使用
//以前工作中没有遇到这个需求，所以一直没了解这个父类的方法，用到后其实很简单
//在你的项目中可能会遇到翻转设备使其竖屏出现新的view,横屏对应的view都Hide		
override func willRotate(to toInterfaceOrientation: UIInterfaceOrientation,du...]]></description><category></category></item><item><title><![CDATA[Swift [weak self]与 [unown self] 的区别]]></title><link>https://blog.youkuaiyun.com/SoftwareDoger/article/details/105552044</link><guid>https://blog.youkuaiyun.com/SoftwareDoger/article/details/105552044</guid><author>SoftwareDoger</author><pubDate>Thu, 16 Apr 2020 10:33:17 +0800</pubDate><description><![CDATA[当我们知道两个对象的生命周期并不相关，那么我们必须使用 [weak self]。相反，非强引用对象拥有和强引用对象同样或者更长的生命周期的话，则应该使用 [unown self]。
例如，ViewControler 对它的 SubView 的引用可以使用 unowned。因为 ViewControler 的生命周期一定比对它的 SubView 长。

...]]></description><category></category></item><item><title><![CDATA[Swift --text的长短决定 Label等控件的宽高]]></title><link>https://blog.youkuaiyun.com/SoftwareDoger/article/details/104862069</link><guid>https://blog.youkuaiyun.com/SoftwareDoger/article/details/104862069</guid><author>SoftwareDoger</author><pubDate>Sat, 14 Mar 2020 16:11:49 +0800</pubDate><description><![CDATA[这是一个常用的需求：比如微信未读消息的那个显示个数的小图标，个位十位百位下的数字当然有不同的长度，这样label也应该长度随内容而变。

比如label高不变长可变：
label.text = "123"
label.frame.size.width = label.text?.boundingRect(with: CGSize(width: CGFloat(MAXFLOAT), height: ...]]></description><category></category></item><item><title><![CDATA[Swift -- Lazy懒加载的用法以及何时用]]></title><link>https://blog.youkuaiyun.com/SoftwareDoger/article/details/104423504</link><guid>https://blog.youkuaiyun.com/SoftwareDoger/article/details/104423504</guid><author>SoftwareDoger</author><pubDate>Fri, 21 Feb 2020 10:37:30 +0800</pubDate><description><![CDATA[如下：Swift中的Lazy关键字用法，细读品他苹果加这样的关键字的作用
//如下面的例子，不用Lazy修饰代码的执行顺序是从上到下的, 也就是说不管我用不用，它都创建，他都执行
let data = 1...3
let result = data.map { (i) -&gt; Int in
    print("正在执行\(i)")
    return i * 2
}

print("准备访...]]></description><category></category></item><item><title><![CDATA[Swift -- 正则表达式过滤邮箱地址格式]]></title><link>https://blog.youkuaiyun.com/SoftwareDoger/article/details/103596453</link><guid>https://blog.youkuaiyun.com/SoftwareDoger/article/details/103596453</guid><author>SoftwareDoger</author><pubDate>Wed, 18 Dec 2019 14:04:15 +0800</pubDate><description><![CDATA[对于一个邮箱格式的输入是否满足需求，需要用正则表达式进行筛选过滤规范，其应用很广泛，咱们只讲邮箱格式的规范：

//判断字符串是不是有效的
     let emailString = "u@qq.com"
        if emailString.isValidateEmail(){
            print("success ????????龙")
        }else{
      ...]]></description><category></category></item></channel></rss>