Swift语法熟悉(三)

为什么将数据模块与网络模块一起编写?紧密相关的2者,也是应用程序最常见的组合:请求数据-存储数据-展示数据。

数据模块(JSON、Model、DB)

数据持久层其实有很多杂乱的选择,文件做为持久层的基础类型,又被分为sql、xml等等类型,我们可选的范围也很广阔,也可以自己动手来完善整个持久层模块,但这似乎对于很懒的程序员来说太浪费玩耍的时间了。所以我们索性在一些完善的开源库中挑选一类供我们做上层的封装。我们姑且确定选择FMDB作为我们的数据库支撑,但是联想到一般情况下,把JSON转换为Model直接存向数据库是常用需求,所以在数据模块这一层貌似扩展的很大了。我们首先引入SwiftyJSON作为JSON解析,不仅供框架使用也供外层使用,但是SwiftJSON解析后的数据仅是JSON对象,看来我们要亲自把JSON对象转换为Model了,写好之后,就是数据的存储。

查看更多

评论

Swift语法熟悉(二)

功能编写

环境管理 ModeSwitch

新建ModeSwitch.swift

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
29
import Foundation
/// 开发模式
public enum Mode: String {
/// 开发模式,打印日志,不上报日志
case develope = "[DEVELOPE MODE]"
/// 调试模式,关闭日志打印,上报日志
case prepared = "[PREPARED MODE]"
/// 生产模式,关闭日志打印,上报日志
case production = "[PRODUCTION MODE]"
}
/// 模式控制
public class INSModeSwitch {
/// 默认为调试模式
public static let `default` = INSModeSwitch(.develope)
public var currentMode: Mode {
didSet {
}
}
/// 私有初始化方法
private init(_ mode: Mode) {
self.currentMode = mode
}
}
/// 模式选择器
public let ModeSwitcher = INSModeSwitch.default

目前这是一个极其简单的模式控制,毫无别的作用,以后扩展功能

查看更多

评论

Swift语法熟悉(一)

知识储备

就像从零搭建OC项目Service支撑一样,要在一定量知识储备的情况下才可以让框架质量得到保证。 Service:项目支撑服务。每个公司的项目都会依赖一定量的组件,每一个组件作为项目的独立模块提供本身的功能供使用。一般来讲,大公司的项目均为组件化项目,一方面为了方便安排开发,另一方面方面集成管理与扩展。小公司的项目则是依赖某一个私有库作为项目的支撑。建议每一个项目都按照组件化项目的思想来从零构造,便于以后核心服务代码抽出进行组件化拆分。

Swift知识储备与框架需求

知识储备即熟悉Swift编码思想,基础知识,进阶知识与细节知识,这里不做赘述。编码能力不能做衡量,即便知识储备不够,也可以慢慢的学习。给出的建议是:多阅读源码,不是大型开源项目的源码,而是小而精的功能性项目源码。

查看更多

评论

IAP

前言:应用内支付(IAP)一直是苹果尽力强迫大家使用的在线支付方式, 用以获利。

进入主题,如何将IAP继承至自己的应用中。我们使用到了开源库APKit,github地址:

APKit的Github仓库主页,包含了本地校验。

准备

In-App Purchase, 简称IAP,允许在iOS app与macOS app中出售商品,如果你想将IAP加入自己的应用中,需要在集成之前做一些配置,下边将会一步一步的教大家配置相关的信息。

IAP在iOS 3.0 和 macOS 10.7之后有效。

Agreements, Tax, and Banking Information

必须完成以下步骤:

查看更多

评论

CFNetwork

CFNetwork

存在于CoreFoundation中的一个地级别但高性能的网络框架。BSD套接字的扩展,CFNetwork物理上和理论上都基于BSD套接字。有大量的Cocoa框架依赖于CFNetwork

CFNetwork更侧重与网络协议,Foundation则更倾向于API数据请求等,虽然框架也提供了一些操作,但是远不如CFNetwork丰富。在学习CFNetwork之前,需要先了解2个基础API框架: CFSocketCFStream

CFSocket API

套接字是网络通信的底层,一个套接字类似于电话的插孔,他允许链接到另外一个电话插孔并传输一些信息过去。最常见的套接字是BSD套接字。CFSocket是BSD套接字的一个抽象概念,在很小开销的情况下,几乎提供了全部BSD套接字的功能,并将套接字集成到一个Loop中。并且,CFSocket可以处理任何类型的套接字。

查看更多

评论

Launch Arguments & Environment Variables.

Walk into any American fast food establishment, and you’ll be greeted with a colorful, back-lit display of specials, set menus, and other a la carte items. But as those in-the-know are quick to point out, larger chains often have a secret menu, passed down by oral tradition between line cook workers and patrons over the generations.

At McDonald’s, one can order a “Poor Man’s Big Mac”, which transforms a double cheeseburger alchemy-like into the chain’s signature sandwich on the cheap.

At Chipotle, there is an unwritten rule that they’ll make anything within the scope of available ingredients. Since Mexican food is a testament to culinary combinatorics, an off-book order for a Quesadilla or Nachos is well within their wheelhouse.

In life, it’s all about knowing what to ask for.

查看更多

评论

AddressBook.framework

AddressBook.framework/AddressBookUI.framework

9.0之后, AddressBook.frameworkContacts.framework代替。但是目前大部分的应用软件起支撑的版本是iOS6.0或7.0, 所以AddressBook还大有用处。之前在简书的文章AddressBook, AddressBookUI中有提及, 但是由于是转载, 所以代码不是很清晰, 而且有一些读者希望得到清晰的代码以及详细的功能解释, 所以在这里把AddressBook.framework以及AddressBookUI.framework重新做一下详细的使用方法介绍。

这篇文章先介绍AddressBook.frameworkAddressBookUI以及Contacts.framework也会补上。

查看更多

评论

What’s New in iOS 10

What’s New in iOS 10.0

  • Table of Contents

iOS 10.0

This article summarizes the key developer-related features introduced in iOS 10, which runs on currently shipping iOS devices. The article also lists the documents that describe new features in more detail.

For late-breaking news and information about known issues, see Release Notes at https://developer.apple.com/ios/download/. For the complete list of new APIs added in iOS 10, see iOS 10.0 API Diffs. For more information on new devices, see iOS Device Compatibility Reference.

To learn about what’s new in Swift, see Swift Language and The Swift Programming Language (Swift 3).

查看更多

评论

方便的处理在StoryBoard、Xib中的圆角设置

直奔主题, 怎么能方便的在StoryBoard与Xib中设置圆角呢?

runtime属性?awakeFromNib?

直接使用Catrgory来实现!

1
2
3
4
5
6
//UIView+O2CornerRadius.h
@interface UIView (O2CornerRadius)
@property (nonatomic, assign) IBInspectable CGFloat cornerRadius;
@end
1
2
3
4
5
6
7
8
9
10
11
12
13
//UIView+O2CornerRadius.m
@implementation UIView (O2CornerRadius)
- (void)setCornerRadius:(CGFloat)cornerRadius
{
self.layer.cornerRadius = cornerRadius;
}
- (CGFloat)cornerRadius
{
return self.layer.cornerRadius;
}
@end

查看更多

评论

Crash 收集

通常情况下, App中会做崩溃的日志收集, 以便进行问题的追踪。奋斗提供了多个平台日志捕获的代码片断。

崩溃捕获

在iOS中碰到异常之后, 捕获异常, 在Log的位置做日志记录, 崩溃次数统计, 下次启动可以做日志上传或者应用启动保护。
下边的runLoop相关的代码的所用是把当前App的RunLoop跑起来, 让程序可以继续运作, 但是某些功能可能无法使用, 可以避免大部分闪退。这段代码是很久以前学自孙源

下边的代码可以满足最简单的日志收集。成熟的开源项目有 KSCrashplcrashreporterCrashKit等。如果想自己的做的更全面就要涉及到更多的知识了, 这篇文章可以帮到你漫谈iOS Crash收集, 如果细读的话, 请注意多个 Crash 日志收集服务共存的坑

查看更多

评论