<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[SwiftIOS_watsUp的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/SwiftIOS_watsUp</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; SwiftIOS_watsUp]]></copyright><item><title><![CDATA[用Cocopod建一个framework]]></title><link>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/106822269</link><guid>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/106822269</guid><author>SwiftIOS_watsUp</author><pubDate>Thu, 18 Jun 2020 03:29:10 +0800</pubDate><description><![CDATA[framework 和 library的区别
要了解什么是library。首先library分为static和dynamic。Static library是指有连接到一个文件，这个文件是有binary code，是在comile time feature，需要连接application里的binary，一般只会某个指定的application使用。而dynamaic一般会在多个application里使用，同时它是run time feature。一般来说static都是较大的文件，而dynamic会是比较]]></description><category></category></item><item><title><![CDATA[binary search]]></title><link>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/106821679</link><guid>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/106821679</guid><author>SwiftIOS_watsUp</author><pubDate>Thu, 18 Jun 2020 01:48:37 +0800</pubDate><description><![CDATA[func binarySearch(searchNumber: Int, array:[Int]) -&gt; Int? {
  
    var range = 0..&lt;array.count
    let maxIndex = array.count - 1
    let minIndex = 0
    
    if searchNumber &gt; array[maxIndex] || searchNumber &lt; array[minIndex] {
        return]]></description><category></category></item><item><title><![CDATA[IOS： Custom Cell]]></title><link>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/106821130</link><guid>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/106821130</guid><author>SwiftIOS_watsUp</author><pubDate>Thu, 18 Jun 2020 00:17:27 +0800</pubDate><description><![CDATA[本篇主要介绍如何在一个tableview加入不同的custom tableview cell。首先是UITableviewController:
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var transactionTableView: UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
  ]]></description><category></category></item><item><title><![CDATA[Swift:NetworkController]]></title><link>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/106227146</link><guid>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/106227146</guid><author>SwiftIOS_watsUp</author><pubDate>Wed, 20 May 2020 07:29:52 +0800</pubDate><description><![CDATA[本篇主要介绍如何建一个networkController进行API Call。首先是APIRequestConfigure
protocol APIRequestConfigure {
    var url: String { get }
    var cachePolicy: URLRequest.CachePolicy? { get }
    var timeoutInterval: TimeInterval? { get }
    var header: [String:String]? { ]]></description><category></category></item><item><title><![CDATA[MVVM programmatically building TableViewCell and downloadImage代码格式创建tableView cell和下载图片]]></title><link>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/101334553</link><guid>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/101334553</guid><author>SwiftIOS_watsUp</author><pubDate>Wed, 25 Sep 2019 05:17:03 +0800</pubDate><description><![CDATA[先把Main Interface哪里去掉，因为将不会用到storyboard

首先在AppDelegate里手动添加tableViewController
import UIKit
import CoreData

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window:...]]></description><category></category></item><item><title><![CDATA[IOS swift： 用MockSession进行unit test]]></title><link>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/101044358</link><guid>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/101044358</guid><author>SwiftIOS_watsUp</author><pubDate>Fri, 20 Sep 2019 04:17:12 +0800</pubDate><description><![CDATA[在进行测试一个network call的时候，我们需要用mockSession来模拟这个api，然后在进行测试，因为在unit test里是不能进行真正的network call的。在unit test里，我们需要更快，更可靠的测试方法，所以一般在测试一个function里的network call的时候，我会建一个mocksession，来模拟api call的部分，接着再用一个本地文件，大多情...]]></description><category></category></item><item><title><![CDATA[IOS swift：用MVVM格式下载和展示图片]]></title><link>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/101006775</link><guid>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/101006775</guid><author>SwiftIOS_watsUp</author><pubDate>Thu, 19 Sep 2019 03:58:55 +0800</pubDate><description><![CDATA[MVVM是ios中编程经常会用到的格式，MVVM大致主要分为三个部分，第一个Model，模型，把会用到的数据模型建立出来，第二个是View，视图，基本上就是viewController，第三个是ViewModel，视图模型，一般是写需要在视图上展示背后的逻辑
首先是Model
import Foundation

struct StructFashion: Decodable {
    let ...]]></description><category></category></item><item><title><![CDATA[swift： IOS里加载图片到collection view]]></title><link>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100653805</link><guid>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100653805</guid><author>SwiftIOS_watsUp</author><pubDate>Mon, 09 Sep 2019 10:35:03 +0800</pubDate><description><![CDATA[我将建一个tableview 并在tableview里放一个collection view，并call很多个api加载图片到每个collection view。首先是UI

我一会会列出三个不同到种类（category），每一个种类我会建一个array，然后每个array里会有很多张图片的api
下面是我的模型
import Foundation

struct Object: Decodable...]]></description><category></category></item><item><title><![CDATA[用URLSession里configuration（配置）的用法和区别]]></title><link>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100512362</link><guid>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100512362</guid><author>SwiftIOS_watsUp</author><pubDate>Tue, 03 Sep 2019 10:41:54 +0800</pubDate><description><![CDATA[在编写一个app的时候，大部分时间都会调用api，然后根据这些api里的数据，我们在做出另外一些其他操作。最常用到的有苹果自带的URLSession，还有Alamofire也是非常好用来调用api。在URLSession里，有三种不同的配置，第一种的default，就是直接调用api，不在做什么其他操作，第二种是ephemeral，这种配置在我们调用api的时候，不会保存任何cache data，...]]></description><category></category></item><item><title><![CDATA[swift: Fibonacci sequence 斐波那契数列]]></title><link>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100179644</link><guid>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100179644</guid><author>SwiftIOS_watsUp</author><pubDate>Sun, 01 Sep 2019 05:27:51 +0800</pubDate><description><![CDATA[斐波那契数列:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …
这个数列的逻辑是前一个数加前两个数得到最新的数，比如34 = 21 + 12， 21 = 13 + 8.。。。。
首先是用recursion的解法得到最新的数
func fibs(n: Int) -&gt; Int {
    if n == 0 {
        return 0
    } else if ...]]></description><category></category></item><item><title><![CDATA[reverse word反转单词 正句变反句]]></title><link>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100149780</link><guid>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100149780</guid><author>SwiftIOS_watsUp</author><pubDate>Fri, 30 Aug 2019 06:02:29 +0800</pubDate><description><![CDATA[比如我有有一个string，“hello how are you”, 我想把它变成一个反句 “olleh woh era uoy”， 这里不是指把句子变反，而是把里面每个单词变成反向
func reverseWords(someString: String) -&gt; String {
    let allWordsArray = someString.components(separated...]]></description><category></category></item><item><title><![CDATA[swift： matrix 转化 array]]></title><link>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100148739</link><guid>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100148739</guid><author>SwiftIOS_watsUp</author><pubDate>Thu, 29 Aug 2019 23:34:13 +0800</pubDate><description><![CDATA[关键字： 下标， 初始化， matrix， get set， assert
本篇是关于struct基本设定和用法，以及如何将一个matrix，以array 的形式排列出来
struct Matrix {
    var rows, columns: Int
    var grid: [Int]
    init(rows: Int, columns: Int) {
        self.ro...]]></description><category></category></item><item><title><![CDATA[Swift： palindrom测试数组是否是回文]]></title><link>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100132415</link><guid>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100132415</guid><author>SwiftIOS_watsUp</author><pubDate>Thu, 29 Aug 2019 10:43:45 +0800</pubDate><description><![CDATA[这个function是测试某一个单词是否是回文
回文： 把相同的词汇或句子，在下文中调换位置或颠倒过来，比如 racecar， 它反过来还是 racecar， 比如 madam， 反过来也还是madam
下面是代码
func palindrom(word: String) -&gt; Bool {
    var array: [Character] = []
    
    for i in ...]]></description><category></category></item><item><title><![CDATA[find commen elements in array 在数组中找到相同的元素 Swift]]></title><link>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100129692</link><guid>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100129692</guid><author>SwiftIOS_watsUp</author><pubDate>Thu, 29 Aug 2019 06:30:27 +0800</pubDate><description><![CDATA[这个function的目的是在一组数组中，找到相同的元素，并列出重复出现了多少次，下面是代码
func findCommonElement(array: [String]) -&gt; [String:Int] {
    var colorDic : [String:Int] = [:]
    for color in array {
        if let count = colorD...]]></description><category></category></item><item><title><![CDATA[两数相加 two-sum]]></title><link>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100129396</link><guid>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100129396</guid><author>SwiftIOS_watsUp</author><pubDate>Thu, 29 Aug 2019 01:46:44 +0800</pubDate><description><![CDATA[本篇主要介绍一道基础算法题，两数相加，目的我们首先有一个值，还有一个array中，找出是否其中有两个数相加起来等于这个值，这里有三种解法，先从complexity最高的一种开始介绍
// 1. 暴力解 O(n^2)
func bruteForceSolution(array: [Int], sum: Int) -&gt; Bool {
    for i in 0..&lt;array.count...]]></description><category></category></item><item><title><![CDATA[Merge Sort 归并排序]]></title><link>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100111862</link><guid>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100111862</guid><author>SwiftIOS_watsUp</author><pubDate>Wed, 28 Aug 2019 07:22:01 +0800</pubDate><description><![CDATA[本篇主要介绍merge sort(归并排序) 用swift的代码形式实现
func mergeSort(array: [Int]) -&gt; [Int] {
    guard array.count &gt; 1 else {
        return array
    }
    let leftArray  = Array(array[0..&lt;array.count/2])
 ...]]></description><category></category></item><item><title><![CDATA[binary search 二分法检索]]></title><link>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100111806</link><guid>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100111806</guid><author>SwiftIOS_watsUp</author><pubDate>Wed, 28 Aug 2019 04:28:20 +0800</pubDate><description><![CDATA[本篇介绍一个比较简单的搜索算法, binary search，二分法检索， 下面是代码
func binarySearch(array: [Int], numberToSearch: Int) -&gt; Bool {
    let minIndex = 0
    let maxIndex = array.count - 1
    let midIndex = maxIndex / 2
  ...]]></description><category></category></item><item><title><![CDATA[IOS WatchKit基础]]></title><link>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100061910</link><guid>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100061910</guid><author>SwiftIOS_watsUp</author><pubDate>Sun, 25 Aug 2019 12:36:31 +0800</pubDate><description><![CDATA[watch上的app是建立在IOS上的，主要是在一个watch extension上的文件中运行，相比较与其他市面上的手表app，watchkit上的app都是基于手机上的app运行，然后在传输到手表上，很多运行也是在ios的background上。下面是一个简单的范例
首先是file -&gt; Target -&gt; WatchKit app
之后在interfaceBuilder里建一个t...]]></description><category></category></item><item><title><![CDATA[CoreData里的增删改查]]></title><link>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100027292</link><guid>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100027292</guid><author>SwiftIOS_watsUp</author><pubDate>Fri, 23 Aug 2019 00:51:08 +0800</pubDate><description><![CDATA[沿着上篇 https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100006664
本篇继续讲CoreData，主要是如何在CoreData里增删改查(CRUB)
首先是增(insert)
func createObject&lt;T: NSManagedObject&gt;(entity: T.Type, storeType: String ...]]></description><category></category></item><item><title><![CDATA[IOS: CoreData]]></title><link>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100006664</link><guid>https://blog.youkuaiyun.com/SwiftIOS_watsUp/article/details/100006664</guid><author>SwiftIOS_watsUp</author><pubDate>Thu, 22 Aug 2019 04:59:08 +0800</pubDate><description><![CDATA[本篇主要介绍IOS Swift 中CoreData的基本用法和一些自己的理解
CoreData是一个数据库框架，可以让在app上本地存储一些数据，也有数据库基本的增删改查功能
CoreData有三部分： Model, PersistentContainer, Context
首先先建一个model

这里我建了一个简单的模型，entity的名字是person，其中这个entity有三个属性，分别是...]]></description><category></category></item></channel></rss>