测试已测试 | ✗ |
Lang语言 | SwiftSwift |
许可证 | MIT |
发布最新发布 | 2017年2月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 saman kumara 维护。
SkyWite
SkyWite 是一个开源的、高度通用的多用途框架。干净代码和流畅的特性使 SkyWite 成为理想的选择。它内置 Cocoa 的强大高级网络抽象,具有模块化架构和设计精良、功能丰富的 API,使用愉快。
使用 SkyWite 实现您的截止日期。您将节省数百小时。
开始使用 SkyWite 进行开发。您一定会很高兴…!是的..
SkyWite 采用干净代码和流畅的特性,使其成为任何 iOS / Macos 开发者的“梦想框架”。其模块化架构和丰富的 API 使其开发变得非常简单。SkyWite 的强大网络抽象是使用 Cocoa 构建的,这使得它对每个人都有易用性,
任何开发者都会出现的下一个问题是,为什么在市场上有很多类似框架的情况下,还要构建此类框架。答案非常直接。市场上有 9/10 的框架具有以下特性
iOS,
Mac OS X,
TV OS and
支持所有请求方法
离线同步支持
需求
如何应用到 Xcode 项目
下载源代码
##架构
SWRequest
SWRequest
SWGet
SWPost
SWMultiPart
SWPut
SWPatch
SWDelete
SWHead
SWOfflineRequestManger
ResponseType
SWResponseDataType
SWResponseJSONDataType
SWResponseXMLDataType
SWResponseStringDataType
SWResponseUIImageType
SWRequestDataType
SWRequestFormData
SWRequestMultiFormData
SWRequestJSONData
Reachability
SWReachability
文件
SWMedia
UIKit+SkyWite
UIImageViewExtension
UIProgressViewExtension
NSURLSession
进行ALL请求将通过NSURLSession。Session会被添加到NSOperationQueue
中。请求创建、响应序列化、网络可用性处理以及离线请求。
GET
请求let s = SWGet()
s.startDataTask(url: "", params:nil, success: { (task, object) in
}) { (task, error) in
print("error", error)
}
如果您想发送参数,您有两个选择
let s = SWGet()
s.startDataTask(url: "", params:"name=this is name&address=your address", success: { (task, object) in
}) { (task, error) in
print("error", error)
}
如果您想对参数和值进行编码,您需要传递带有键/值的Dictionary
对象。
let s = SWGet()
s.startDataTask(url: "", params:"name=this is name&address=your address", success: { (task, object) in
}) { (task, error) in
print("error", error)
}
我们推荐使用第二个选项,因为如果参数或值中包含&
符号,则会中断值的发送。
GET
带响应类型可用的响应类型
SWResponseJSONDataType
,SWResponseJSONDataType
,SWResponseXMLDataType
,SWResponseStringDataType
,SWResponseUIImageType
您需要设置responseDataType
。
// this response will be JSON
let s = SWGet()
s.responseDataType = SWResponseStringDataType()
s.startDataTask(url: "", params:nil, success: { (task, object) in
print("item", object)
}) { (task, error) in
print("error", error)
}
GET
带加载指示器如果您将父视图的方法设为,则加载指示器将会显示。
let s = SWGet()
s.responseDataType = SWResponseDataType()
s.startDataTask(url: "", params:nil, parentView: self.view , success: { (task, object) in
print("item", object)
}) { (task, error) in
print("error", error)
}
如果您想自定义加载视图,您需要将一个新的nib
文件添加到您的项目中,并将其命名为'sw_loadingView'。它将会在屏幕上显示。
如果您想访问响应中的缓存数据,您需要使用包含缓存块的相应方法。
let s = SWGet()
s.responseDataType = SWResponseStringDataType()
s.startDataTask(url: "", params: nil, parentView: self.view, cache: { (response, object) in
print("chache", object)
}, success: { (task, object) in
print("success", object)
}) { (task, error) in
print("success", error)
}
POST
请求(简单)缓存和加载视图在相关方法中可用。请检查可用方法
let s = SWPost()
s.responseDataType = SWResponseStringDataType()
s.startDataTask(url: "", params:["name":"this is name", "address": "your address"] as AnyObject , success: { (task, object) in
print("item", object)
}) { (task, error) in
print("error", error)
}
let s2 = SWPost()
s2.responseDataType = SWResponseStringDataType()
s2.startDataTask(url: "", params:"saman=test" as AnyObject , success: { (task, object) in
print("item", object)
}) { (task, error) in
print("error", error)
}
POST
多部分请求这很简单。
let s = SWPost()
let image = NSImage(named: "skywite")
let imgData = pngRepresentationOfImage(image: image!)
let media1 = SWMedia(fileName: "imagefile.png", key: "image", data: imgData)
let media2 = SWMedia(fileName: "imagefile.jpg", key: "image2", mineType:"image/jpeg", data: imgData)
s.responseDataType = SWResponseStringDataType()
s.startUploadTask(url: "", files:[media1, media2] , params: ["name":"this is name", "address": "your address"] as AnyObject, success: { (task, object) in
}) { (task, error) in
}
//create with custom mine type one
let media2 = SWMedia(fileName: "imagefile.jpg", key: "image2", mineType:"image/jpeg", data: imgData)
PUT
简单请求let s = SWPut()
s.responseDataType = SWResponseStringDataType()
s.startDataTask(url: "", params:"saman=test" as AnyObject , success: { (task, object) in
print("item", object)
}) { (task, error) in
print("error", error)
}
PATCH
简单请求let s = SWPatch()
s.responseDataType = SWResponseStringDataType()
s.startDataTask(url: "", params:"saman=test" as AnyObject , success: { (task, object) in
print("item", object)
}) { (task, error) in
print("error", error)
}
DELETE
简单请求let s = SWDelete()
s.responseDataType = SWResponseStringDataType()
s.startDataTask(url: "", params:"saman=test" as AnyObject , success: { (task, object) in
print("item", object)
}) { (task, error) in
print("error", error)
}
HEAD
简单请求let s = SWHead()
s.responseDataType = SWResponseStringDataType()
s.startDataTask(url: "", params:"saman=test" as AnyObject , success: { (task, object) in
print("item", object)
}) { (task, error) in
print("error", error)
}
以下所有功能适用于所有请求类型。
例如:如果您需要访问,则需要调用包含缓存块的相关方法
如果您想添加自定义首部,可以将它设置为访问请求对象。
let s = SWPost()
s.reqeust.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
s.responseDataType = SWResponseStringDataType()
s.startDataTask(url: "", params:["name":"this is name", "address": "your address"] as AnyObject , success: { (task, object) in
print("item", object)
}) { (task, error) in
print("error", error)
}
如果您想更改请求超时,您需要更改名为timeOut
的属性。
let s = SWPost()
s.timeOut = 120
s.responseDataType = SWResponseStringDataType()
s.startDataTask(url: "", params:["name":"this is name", "address": "your address"] as AnyObject , success: { (task, object) in
print("item", object)
}) { (task, error) in
print("error", error)
}
您需要在所有请求上发送responseDataType
的对象类型。
//JSON
let s = SWPost()
s.responseDataType = SWResponseJSONDataType()
s.startDataTask(url: "" , params: ["name":"this is name for testing", "address": "your address"] as AnyObject, parentView: nil, sendLaterIfOffline: true, cache: { (cache, response) in
}, success: { (task, response) in
}) { (task, error) in
}
//String
let s2 = SWPost()
s2.responseDataType = SWResponseStringDataType()
s2.startDataTask(url: "" , params: ["name":"this is name for testing", "address": "your address"] as AnyObject, parentView: nil, sendLaterIfOffline: true, cache: { (cache, response) in
}, success: { (task, response) in
}) { (task, error) in
}
UIImageView
与SkyWite
您无需再下载图片并将其设置为UIImageView
。您可以将URL设置为UIImageView
。
// Please use only one method . you can see 4 methods :)
let imageView = UIImageView.init(frame: CGRect(x:0, y:0, width:300, height:300))
imageView.loadWithURLString(url: "")
imageView.loadWithURLString(url: "", loadFromCacheFirst: true)
imageView.loadWithURLString(url: "") { (image) in
}
imageView.loadWithURLString(url: "", loadFromCacheFirst: true) { (image) in
}
新的网络连通性类支持当网络状态变化时执行的块。
可用状态
不可达
WWAN
WiFi
if (SWReachability.getCurrentNetworkStatus() == .NotReachable) {
//connection not avaible
}
//if you want to get status chnage notification
SWReachability.checkNetowrk(currentNetworkStatus: { (currentStatus) in
}) { (changedStatus) in
}
let s = SWPost()
let image = UIImage(named: "skywite")
let imgData = UIImagePNGRepresentation(image!)
let media1 = SWMedia(fileName: "imagefile.png", key: "image", data: imgData!)
let media2 = SWMedia(fileName: "imagefile.jpg", key: "image2", mineType:"image/jpeg", data: imgData!)
s.responseDataType = SWResponseStringDataType()
s.startUploadTask(url: "https://:3000/api/v1/users/users", files:[media1, media2] , params: ["name":"this is name", "address": "your address"] as AnyObject, success: { (task, object) in
}) { (task, error) in
}
progressView.setRequestForUpload(request: s)
let s = SWPost()
s.responseDataType = SWResponseJSONDataType()
s.startDownloadTask(url: "http://192.168.1.36:3000/api/v1/users/jobs" , params:nil , parentView: nil, sendLaterIfOffline: true, cache: { (cache, response) in
}, success: { (task, response) in
}) { (task, error) in
}
progressView.setRequestForDownload(request: s)
您可以将自定义对象设置为请求对象中的 userObject
。这将允许任何类型的对象。
let s = SWPost()
s.userObject = //any type object.
您可以为请求设置 tag
。
let s = SWPost()
s.tag = 12;
SkyWite
提供的离线请求这非常简单。首先,您需要发送离线请求的过期时间。这是秒数。
SWOfflineManager.requestExpireTime(seconds: 1300)
您有带参数传递的方法 sendLaterIfOllfine
。只需传递 YES
即可。
let s = SWPost()
s.responseDataType = SWResponseJSONDataType()
s.startDownloadTask(url: "http://192.168.1.36:3000/api/v1/users/jobs" , params:nil , parentView: nil, sendLaterIfOffline: true, cache: { (cache, response) in
}, success: { (task, response) in
}) { (task, error) in
}
如果您想捕获离线请求,则需要使用以下方法。最好将以下行添加到您的 AppDelegate
的 didFinishLaunchingWithOptions
方法中。
SWOfflineManager.sharedInstance.request(success: { (squreqeust, obj) in
}) { (request, error) in
}
请注意,您需要设置 tag
或 userObject
以识别请求。 userObject
应为“NSCoding”支持的值。
请使用以下方法为 UIProgressView 设置任务。
func setDownloadTask(task: URLSessionDownloadTask) {}
func setUploadTask(task: URLSessionUploadTask) {}
SkyWite
由 SkyWite 所拥有和维护。
SkyWite
最初由 saman kumara 创建。如果您想联系 [email protected]
如果您相信您已经发现了一个与 SkyWite
相关的安全漏洞,请尽快通过电子邮件报告,发送至 [email protected]。请勿将其发布在公开的问题跟踪器上。
Skywite
在 MIT 许可下发布。有关详细信息,请参阅许可证 (LICENSE)。