Fork me on GitHub
乔羽的技术博客


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

Swift优秀的第三方库

发表于 2018-07-28 | 更新于 2018-12-27 | 分类于 开发 | 阅读次数: | 字数:1.6k | 阅读时长:6min

Swift优秀的第三方库

Swift开发资源汇总

iOS开发优秀博客和软件推荐

数据库、数据存储

  • realm-cocoa - Realm 是一个移动端数据库:Core Data 和 SQLite 的替代品

  • Valet - Valet 可以让你安全地在 iOS 或 OS X 钥匙链中存储数据,而不需要掌握任何钥匙链工作的知识。它支持在一台设备的多个应用(同一个开发者)间分享数据,以及在一个应用中在多个设备间利用 iCloud 进行分享。支持 Touch ID

  • SQLite.swift - 简单、轻量,使用上最SQL的SQLite封装库

  • SugarRecord - 基于CoreData与REALM的好用封装

网络库、Network

  • Moya - 用 Swift 写的网络抽象层

  • Alamofire

  • ResponseDetective - 一个非嵌入式框架,用于拦截应用程序和服务器之间的任何传出请求和传入响应以用于调试目的。

阅读全文 »

MacOS 终端 iTerm2 并配置 zsh

发表于 2018-03-15 | 更新于 2018-09-27 | 分类于 教程 | 阅读次数: | 字数:1.9k | 阅读时长:8min

Mac OS 终端 iTerm2

之前一直使用的 Mac OS 自带的终端,觉得也还可以,后来看大神 onevcat 的直播视频,发现他用的是 iTerm,真的是非常好用,于是自己也开始倒腾起来。

阅读全文 »

iOS WKWebView https 加载不受信任的站点

发表于 2018-03-07 | 更新于 2018-09-27 | 分类于 开发 | 阅读次数: | 字数:306 | 阅读时长:1min

原因

公司要对接一个第三方平台,然后就有了一个可奇葩的逻辑,用户填写完相关信息后,点击提交,然后服务器返回一个网页的源代码……需要用WebView加载这个网页。

实现的时候发现,我自己写的简单的网页源码可以加载,但是服务器返回的就是无法加载。后来把源码保存成文件以后,用浏览器打开发现,该网页链接的站点是一个不受信任的站点,应该是因为服务器证书无效而不受信任。

阅读全文 »

Ubuntu安装SublimeText3并配置相关内容

发表于 2017-12-23 | 更新于 2018-09-27 | 分类于 教程 | 阅读次数: | 字数:702 | 阅读时长:3min

Ubuntu安装SublimeText3并配置相关内容

下载安装SublimeText3

1.下载SublimeText3的安装包,官网地址

2.解压安装包

3.解压获得 sublime_text_3 文件夹,将该文件夹重命名为sublime_text

4.点击右键,打开终端,输入下面代码,把文件夹移动到/opt/

sudo mv sublime_text /opt/

阅读全文 »

Swift面向协议编程总结

发表于 2017-11-13 | 更新于 2019-03-04 | 分类于 开发 | 阅读次数: | 字数:1.3k | 阅读时长:4min

Swift面向协议编程

所谓面向协议编程,就是使用protocol声明方法,然后使用extension提供默认的实现,只要需要使用到该方法的类遵循该protocol,就可以直接使用该extension的实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
protocol animal {
var food: String {get}
func eat()
}

extension animal {
func eat() {
print("food name is \(food)")
}
}

struct Cat: animal {

var food: String = "mouse"
}

struct Dog:animal {
var food: String = "cat"
}

let cat = Cat()
let dog = Dog()
cat.eat()
dog.eat()

log:
food name is mouse
food name is cat
阅读全文 »

Swift错误处理

发表于 2017-11-11 | 更新于 2018-09-27 | 分类于 开发 | 阅读次数: | 字数:2.3k | 阅读时长:10min

前言

任何代码都会发生错误,这些错误有些是可以补救的,有些则只能让程序崩溃。良好的错误处理能够让你的代码健壮性提高,提高程序的稳定性。

本文的Swift版本:Swift 3

Objective C

返回nil

如果出错了,就返回空是Objective C中的一种常见的处理方式。因为在Objective C中,向nil发送消息是安全的。比如:

1
2
3
4
5
6
7
8
9
- (instancetype)init
{
self = [super init];
if (self) {

}
//如果初始化失败,会返回nil
return self;
}

断言

断言指定了我们方法的上下文,如果断言不满足,则在Debug环境下会直接crash。

比如:AFNetworking中的af_resume方法

1
2
3
4
5
6
7
8
9
- (void)af_resume {
NSAssert([self respondsToSelector:@selector(state)], @"Does not respond to state");
NSURLSessionTaskState state = [self state];
[self af_resume];

if (state != NSURLSessionTaskStateRunning) {
[[NSNotificationCenter defaultCenter] postNotificationName:AFNSURLSessionTaskDidResumeNotification object:self];
}
}
阅读全文 »

iOS多线程 Swift4 GCD深入解析

发表于 2017-11-07 | 更新于 2018-09-27 | 分类于 开发 | 阅读次数: | 字数:4k | 阅读时长:16min

iOS多线程深入解析

必要的概念

进程/线程

进程:进程指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的活动实体。

线程:线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行。

操作系统引入进程的目的:为了使多个程序能并发执行,以提高资源的利用率和系统的吞吐量。

操作系统引入线程的目的:在操作系统中再引入线程,则是为了减少程序在并发执行时所付出的时空开销,使OS具有更好的并发性。多线程技术可以提高程序的执行效率。

在引入线程的OS中,通常把进程作为资源分配的基本单位,而把线程作为独立运行和独立调度的基本单位。

阅读全文 »

Ubuntu Anaconda安装TensorFlow-GPU

发表于 2017-10-22 | 更新于 2018-09-27 | 分类于 教程 | 阅读次数: | 字数:1.2k | 阅读时长:5min

Ubuntu Anaconda安装TensorFlow-GPU

目前时间是2017.10.22,目前的CUDA最新版本是CUDA9,TensorFlow的版本是1.3,一开始安装CUDA9,后来发现TensorFlow不支持,网上有人说可以通过源代码安装TensorFlow,但是我觉得太麻烦了,后来就换了CUDA8,中间遇到了很多版本不对应所产生的问题,下面详细列一下本次安装所使用的安装包的版本号:(亲测可安装成功)

  • CUDA: cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64.deb
  • cudnn: cudnn-8.0-linux-x64-v5.1.tar
  • Anaconda: Anaconda3-5.0.0.1-Linux-x86_64.sh
阅读全文 »

制作Mac系统盘

发表于 2017-10-21 | 更新于 2018-09-27 | 分类于 教程 | 阅读次数: | 字数:667 | 阅读时长:2min

一、准备工作:

  • 准备一个8GB或以上容量的U盘,确保里面的数据已经妥善备份好(该过程会抹掉 U 盘全部数据)
  • 首先,从AppSotre下载macOS原版安装包。目前是macOS High Sierra.app

二、格式化优盘

  • 插入你的 U 盘,然后在「应用程序」->「实用工具」里面找到并打开「磁盘工具」
  • 在左方列表中找到 U 盘的名称并点击
  • 右边顶部选择「分区」,然后在「分区布局」选择「1个分区」
  • 在分区信息中的 「名称」输入「ABCD」 (由于后面的命令中会用到此名称,如果你要修改成其他(英文),请务必对应修改后面的命令)
  • 在「格式」中选择 「Mac OS 扩展 (日志式)」
  • 这时,先别急着点“应用”,还要先在 「选项」里面,选择「GUID 分区表」
  • 开始格式化
阅读全文 »

适配iOS11(常用)

发表于 2017-09-29 | 更新于 2018-09-27 | 分类于 开发 | 阅读次数: | 字数:1.2k | 阅读时长:4min

导航栏变化

高度变化

在iOS11中导航栏多了一个LargeTitleView,专门专门显示大字标题。该LargeTitleView的高度为52p。

  • iPhoneX之前的机型,默认高度64p,如果显示大字标题,总高度为20+44+52=116p
  • iPhoneX,statusbar=44,默认高度88p,如果显示大字标题,总高度为44+44+52=140p

iPhoneX底部还多了一个半角的矩形,使得tabbar多出来了34p的高度

阅读全文 »
1234
乔羽 / FightingJoey

乔羽 / FightingJoey

Efforts to become the person I want to be.

36 日志
2 分类
9 标签
RSS
GitHub 简书 掘金 微博
我的朋友
  • 败寇路飞
© 2015 — 2020 乔羽 / FightingJoey
本站访客数: