SkyWite 1.3

SkyWite 1.3

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布最新发布2017年2月
SwiftSwift 版本3.0
SPM支持 SPM

saman kumara 维护。



  • 作者:
  • saman kumara

SkyWite

Skywite




SkyWite 是一个开源的、高度通用的多用途框架。干净代码和流畅的特性使 SkyWite 成为理想的选择。它内置 Cocoa 的强大高级网络抽象,具有模块化架构和设计精良、功能丰富的 API,使用愉快。

使用 SkyWite 实现您的截止日期。您将节省数百小时。

开始使用 SkyWite 进行开发。您一定会很高兴…!是的..

SkyWite 采用干净代码和流畅的特性,使其成为任何 iOS / Macos 开发者的“梦想框架”。其模块化架构和丰富的 API 使其开发变得非常简单。SkyWite 的强大网络抽象是使用 Cocoa 构建的,这使得它对每个人都有易用性,

任何开发者都会出现的下一个问题是,为什么在市场上有很多类似框架的情况下,还要构建此类框架。答案非常直接。市场上有 9/10 的框架具有以下特性

  •    iOS,
    
  •    Mac OS X,
    
  •    TV OS and
    

支持所有请求方法

  1. 离线请求支持
  2. HTTP 请求操作管理器
  3. Cocoa Pod 支持
  4. SWIFT 兼容
  5. 支持苹果 UI Kit。
  6. 支持后台请求
  7. 会话管理器
  8. 可达性管理器
  9. 安全
  10. 提供免费的框架支持
  11. 框架将随着新操作系统的发布而持续更新
  12. 框架社区支持 bug 修复
  13. 代码修订灵活性
  14. 对框架崩溃管理的 99% 保证
  15. 支持块
  16. MIT 许可证
  17. 上述特性不仅在其他框架中可用,而且在 SkyWite 中也可用,但是以下是 SkyWite 独特之处

离线同步支持

  1. 框架在发送请求时添加加载指示器,还允许添加自定义指示器
  2. 一行代码即可启动请求,这将大约节省 20 行代码
  3. 带有后台请求的块
  4. 标记请求(设置 int 值以标识请求)
  5. 为离线请求设置优先级。
  6. 自动生成所有请求/响应体,这将为开发者节省大约 50-70 行代码
  7. 与之前发布的 swnetworking 框架一样,此框架也没有问题。如果您发现任何问题,我会尽快修复它们。现在我们不需要团队,因为没有任何问题要修复。

需求

在使用此功能之前,您需要将“SystemConfiguration”框架添加到项目中。

如何应用到 Xcode 项目

下载源代码

从 gitHub 下载 Skywite

通信

  • 如果您需要任何帮助,请使用Stack Overflow。 (标签 'skywite') 或者您可以发送详细的邮件给我们(我们会提供快速反馈)
  • 如果您想提出一般性问题,请使用Stack Overflow
  • 如果您发现了错误并且可以提供可靠复现错误的步骤,可以创建一个问题或者您也可以提供贡献。
  • 如果您有功能请求,发送请求邮件,我们会尽快添加。
  • 如果您想要贡献力量,提交一个拉取请求。

##架构

  • 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

如何使用

使用HTTP请求将通过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 带响应类型

可用的响应类型
SWResponseJSONDataTypeSWResponseJSONDataTypeSWResponseXMLDataTypeSWResponseStringDataTypeSWResponseUIImageType
您需要设置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
}

UIImageViewSkyWite

您无需再下载图片并将其设置为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
}

如果您想捕获离线请求,则需要使用以下方法。最好将以下行添加到您的 AppDelegatedidFinishLaunchingWithOptions 方法中。

SWOfflineManager.sharedInstance.request(success: { (squreqeust, obj) in
}) { (request, error) in
}

请注意,您需要设置 taguserObject 以识别请求。 userObject 应为“NSCoding”支持的值。

为 UIProgressView 设置任务

请使用以下方法为 UIProgressView 设置任务。

func setDownloadTask(task: URLSessionDownloadTask) {}
func setUploadTask(task: URLSessionUploadTask) {}

鸣谢

SkyWiteSkyWite 所拥有和维护。
SkyWite最初由 saman kumara 创建。如果您想联系 [email protected]

安全披露

如果您相信您已经发现了一个与 SkyWite 相关的安全漏洞,请尽快通过电子邮件报告,发送至 [email protected]。请勿将其发布在公开的问题跟踪器上。

许可证

Skywite 在 MIT 许可下发布。有关详细信息,请参阅许可证 (LICENSE)。