以上就是给各位分享HandyJSON第三方库的日常使用与错误记录,同时本文还将给你拓展055Python第三方库安装、3、python第三方库的安装方式、Android引用第三方库的方法、angula
以上就是给各位分享HandyJSON第三方库的日常使用与错误记录,同时本文还将给你拓展055 Python第三方库安装、3、python第三方库的安装方式、Android 引用第三方库的方法、angularjs如何使用第三方库?angularjs使用第三方库详解等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- HandyJSON第三方库的日常使用与错误记录
- 055 Python第三方库安装
- 3、python第三方库的安装方式
- Android 引用第三方库的方法
- angularjs如何使用第三方库?angularjs使用第三方库详解
HandyJSON第三方库的日常使用与错误记录
一、错误提示
1、更新Xcode10.2,Swift5.0出现错误提示
二、HandyJSON的使用
1、基本操作:序列化与反序列化
class BasicTypes: HandyJSON {
var int: Int = 2
var doubleOptional: Double?
var stringImplicitlyUnwrapped: String!
required init() {}
}
//反序列化
let jsonString = "{\"doubleOptional\":1.1,\"stringImplicitlyUnwrapped\":\"hello\",\"int\":1}"
if let object = BasicTypes.deserialize(from: jsonString) {
print(object.int)
print(object.doubleOptional!)
print(object.stringImplicitlyUnwrapped!)
}
print("-----------------------------")
//序列化
let objectOne = BasicTypes()
objectOne.int = 1
objectOne.doubleOptional = 2.2
objectOne.stringImplicitlyUnwrapped = "world"
print(objectOne.toJSON()!)
print("-----------------------------")
print(objectOne.toJSONString()!)
print("-----------------------------")
print(objectOne.toJSONString(prettyPrint: true)!)
print("-----------------------------")
2、基本数据类型
class BasicTypesTwo: HandyJSON {
var bool: Bool = true
var intOptional: Int?
var doubleImplicitlyUnwrapped: Double!
var anyObjectOptional: Any?
var arrayInt: Array<Int> = []
var arrayStringOptional: Array<String>?
var setInt: Set<Int>?
var dictAnyObject: Dictionary<String, Any> = [:]
var nsNumber = 2
var nsString: NSString?
required init() {}
}
let object = BasicTypesTwo()
object.intOptional = 1
object.doubleImplicitlyUnwrapped = 1.1
object.anyObjectOptional = "StringValue"
object.arrayInt = [1, 2]
object.arrayStringOptional = ["a", "b"]
object.setInt = [1, 2]
object.dictAnyObject = ["key1": 1, "key2": "stringValue"]
object.nsNumber = 2
object.nsString = "nsStringValue"
let jsonString = object.toJSONString()!
if let object = BasicTypesTwo.deserialize(from: jsonString) {
print(object.arrayStringOptional!)
print(object.dictAnyObject)
//....
}
3、指定解析路径
HandyJSON支持指定从哪个具体路径开始解析,反序列化到Model。
class Cat: HandyJSON {
var id: Int64!
var name: String!
required init() {}
}
let json = "{\"code\":200,\"msg\":\"success\",\"data\":{\"cat\":{\"id\":12345,\"name\":\"Kitty\"}}}"
if let cat = Cat.deserialize(from: json, designatedPath: "data.cat") {
print(cat.name!)
print(cat.id!)
}
4、组合对象
注意,如果Model的属性不是基本类型或集合类型,那么它必须是一个服从HandyJSON
协议的类型。
如果是泛型集合类型,那么要求泛型实参是基本类型或者服从HandyJSON
协议的类型。
class Component: HandyJSON {
var aInt: Int?
var aString: String?
required init() {}
}
class Composition: HandyJSON {
var aInt: Int?
var comp1: Component?
var comp2: Component?
required init() {}
}
let jsonString = "{\"num\":12345,\"comp1\":{\"aInt\":1,\"aString\":\"aaaaa\"},\"comp2\":{\"aInt\":2,\"aString\":\"bbbbb\"}}"
if let composition = Composition.deserialize(from: jsonString) {
print(composition.comp1?.aString! as Any)
print(composition.comp2?.aInt! as Any)
}
5、继承
如果子类要支持反序列化,那么要求父类也服从HandyJSON
协议。
let jsonString = "{\"id\":12345,\"color\":\"black\",\"name\":\"cat\"}"
if let cat = Cat.deserialize(from: jsonString) {
print(cat)
}
6、JSON数组
如果JSON的第一层表达的是数组,可以转化它到一个Model数组。
let jsonArrayString: String? = "[{\"name\":\"Bob\",\"id\":\"1\"}, {\"name\":\"Lily\",\"id\":\"2\"}, {\"name\":\"Lucy\",\"id\":\"3\"}]"
if let cats = [Cat].deserialize(from: jsonArrayString) {
cats.forEach({ (cat) in
print(cat?.name! as Any)
print(cat?.id! as Any)
})
}
7、字典 -> 模型
class BasicTypes: HandyJSON {
var int: Int = 2
var doubleOptional: Double?
var stringImplicitlyUnwrapped: String!
required init() {}
}
var dict = [String: Any]()
dict["doubleOptional"] = 1.1
dict["stringImplicitlyUnwrapped"] = "hello"
dict["int"] = 1
if let object = BasicTypes.deserialize(from: dict) {
print(object.doubleOptional as Any)
print(object.stringImplicitlyUnwrapped as Any)
print(object.int)
}
8、自定义解析规则
开发中某些关键字段为避免混淆,可以使用其他关键字替换
class Person: HandyJSON {
var ID: Int64!
var username: String!
var parents: (String, String)?
required init() {}
func mapping(mapper: HelpingMapper) {
mapper <<<
self.ID <-- "cat_id"
mapper <<<
self.username <-- "name"
}
}
let jsonString = "{\"cat_id\":12345,\"name\":\"Kitty\",\"parent\":\"Tom/Lily\",\"friend\":{\"id\":54321,\"name\":\"Lily\"}}"
if let person = Person.deserialize(from: jsonString) {
print(person.ID as Any)
print(person.username as Any)
}
9、日常开发接口测试
class CarList : HandyJSON {
var ID : String!
var pic : String?
var comname : String?
var address : String?
required init() {
}
func mapping(mapper: HelpingMapper) {
mapper <<<
self.ID <-- "id"
}
}
//返回json样式
//成功:
//{
// "status": 1,
// "result": [{
// "id": "1",
// "pic": "图片地址",
// "comname": "汽车美容店",
// "address": "广东省"
// }]
//}
//失败:
//{
// "status":0,
// "msg":"获取失败,请稍后重试..."
//}
let dict = ["pagesize":10,"page":1,"address":""] as [String : Any]
NANetworkHandler.shareInstance.postRequest("https://******/submit_ajax.ashx?action=APP_GetBusiness", params: dict, success: { (response) in
let resultJson = response
if resultJson["status"] as! Int == 1 {
if let carArr = [CarList].deserialize(from: (resultJson["result"] as! Array) ) {
carArr.forEach({ (car) in
print("\(String(describing: car?.ID))")
print("\(String(describing: car?.pic))")
print("\(String(describing: car?.comname))")
print("\(String(describing: car?.address))")
})
}
}else if response["status"] as! Int == 0 {
//...
}
}) { ( err) in
//...
}
附:
Alamofire简单封装
import UIKit
import Alamofire
public typealias Success = (_ dict : [String:Any])->()
public typealias Failure = (_ error : Error)->()
class NANetworkHandler : NSObject {
static var shareInstance : NANetworkHandler {
struct Share {
static let instance = NANetworkHandler()
}
return Share.instance
}
//GET请求
func getRequest(
_ urlString: String,
params: Parameters? = nil,
success: @escaping Success,
failure: @escaping Failure)
{
request(urlString, params: params, method: .get, success, failure)
}
//POST请求
func postRequest(
_ urlString: String,
params: Parameters? = nil,
success: @escaping Success,
failure: @escaping Failure)
{
request(urlString, params: params, method: .post, success, failure)
}
//图片上传
func upLoadImageRequest(urlString : String, params:[String:String], imgArr:[UIImage], name: [String],success : @escaping Success, failure : @escaping Failure){
let headers = ["content-type":"multipart/form-data"]
Alamofire.upload(
multipartFormData: { multipartFormData in
if imgArr.count == 0 {
return
}
//此处循环上传多占图片
for (index, value) in imgArr.enumerated() {
let imageData = UIImage.jpegData(value)(compressionQuality: 0.5)!
let formatter = DateFormatter()
formatter.dateFormat = "yyyyMMddHHmmss"
let str = formatter.string(from: Date())
let fileName = str+"\(index)"+".jpg"
multipartFormData.append(imageData, withName: "imageUpload", fileName: fileName, mimeType: "image/png")
}
},
to: urlString,
headers: headers,
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
if let value = response.result.value as? [String: Any] {
success(value as [String : Any])
}
}
break
case .failure(let err):
failure(err)
break
}
}
)
}
private func request(_ urlString: String,
params:Parameters? = nil,
method:HTTPMethod,
_ success:@escaping Success,
_ failure:@escaping Failure){
let manager = Alamofire.SessionManager.default
manager.session.configuration.timeoutIntervalForRequest = 15
manager.request(urlString, method: method, parameters: params, encoding: JSONEncoding.default, headers: nil).responseJSON { (response) in
switch response.result {
case .success:
if let value = response.result.value as? [String: Any] {
success(value as [String : Any])
}
break
case .failure(let err):
failure(err)
break
}
}
}
}
055 Python第三方库安装
目录
- 一、概述
- 二、看见更大的Python世界
- 2.1.1 PyPI
- 2.1.2 实例:开发与区块链相关的程序
- 2.1 Python社区
- 2.2 安装Python第三方库
- 三、第三方库的pip安装方法
- 3.1 pip安装方法
- 四、第三方库的集成安装方法
- 4.1 集成安装方法
- 五、第三方库的文件安装方法
- 5.1 文件安装方法
- 5.2 实例:安装wordcloud库
- 六、单元小结
一、概述
- 看见更大的Python世界
- 第三方库的pip安装方法
- 第三方库的集成安装方法
- 第三方库的文件安装方法
二、看见更大的Python世界
2.1 Python社区
>13万个第三方库:https://pypi.org/
2.1.1 PyPI
- PyPI: Python Package Index
- PSF维护的展示全球Python计算生态的主站
- 学会检索并利用PyPI,找到合适的第三方库开发程序
2.1.2 实例:开发与区块链相关的程序
- 第1步:在pypi.org搜索 blockchain
- 第2步:挑选适合开发目标的第三方库作为基础
- 第3步:完成自己需要的功能
2.2 安装Python第三方库
三种方法
- 方法1(主要方法): 使用pip命令
- 方法2: 集成安装方法
- 方法3: 文件安装方法
三、第三方库的pip安装方法
3.1 pip安装方法
- 安装指定的第三方库:D:\>pip install <第三方库名>
- 使用- U标签更新已安装的指定第:D:\>pip install –U <第三方库名>
- 卸载指定的第三方库:D:\>pip uninstall <第三方库名>
- 下载但不安装指定的第三方库:D:\>pip download <第三方库名>
- 列出某个指定第三方库的详细信息:D:\>pip show <第三方库名>
- 根据关键词在名称和介绍中搜索第三方库:D:\>pip search <关键词>
- 列出当前系统已经安装的第三方库:D:\>pip list
四、第三方库的集成安装方法
4.1 集成安装方法
集成安装:结合特定Python开发工具的批量安装
Anaconda:https://www.cnblogs.com/nickchen121/p/11107842.html
- 支持近800个第三方库
- 包含多个主流工具
- 适合数据计算领域开发
五、第三方库的文件安装方法
5.1 文件安装方法
为什么有些第三方库用pip可以下载,但无法安装?
- 某些第三方库pip下载后,需要编译再安装
- 如果操作系统没有编译环境,则能下载但不能安装
- 可以直接下载编译后的版本用于安装吗?
http://www.lfd.uci.edu/~gohlke/pythonlibs/
5.2 实例:安装wordcloud库
- 步骤1:在UCI页面上搜索wordcloud
- 步骤2:下载对应版本的文件
- 步骤3:使用pip install <文件名>安装
六、单元小结
- PyPI:Python Package Index
- pip命令的各种用法
- Anaconda集成开发工具及安装方法
- UCI页面的“补丁”安装方法
3、python第三方库的安装方式
前言:在学习Python过程中,经常要用到很多第三方库,面对各种不同情况,Python为我们提供了多种安装方法,这里主要介绍三种方法:pycharm在线安装、pip在线安装(强烈推荐)、离线安装。
方式一:pycharm在线安装
点击pycharm菜单栏File--Settings--Project:xx--Project Interpreter,点击+,搜索需要的库,点击Install Package
方式二:pip在线安装(强烈推荐)
按win+r,输入”cmd“回车,输入”pip install xxxx“,xxxx为对应的第三方库名,出现successfully等字样即安装成功,如果在py文件中报红线说明该库未安装或者安装失败
这种方式会经常出现安装失败的现象,你会看到下载的进度条,显示当下载到百分之几十的时候窗口中就会出现一堆红字,有如下类似提示,这是python第三方库下载出问题了,这是由于我们在cmd窗口进行pip安装时候,默认是去下载国外资源,由于国内网络问题常常会网速不稳定甚至没有网速,这时候就会导致安装包时出现错误。
一劳永逸的方法就是选择使用国内的资源!推荐几个值得拥有的国内镜像站:
清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/
阿里云:http://mirrors.aliyun.com/pypi/simple/
豆瓣:http://pypi.douban.com/simple/
阿里云 http://mirrors.aliyun.com/pypi/simple/
使用方法:同样在cmd输入命令,只是后缀要加上国内源,如pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple/
方式三:离线安装
1.到官网或者国内源中下载需要的库,把下载好的文件放到python的安装目录下
2.打开cmd,输入e:回车,进入到相关的盘中,cd进入到存放的文件夹
3.输入python setup.py install
Android 引用第三方库的方法
也挺简单的,现在主要说一下我碰到的问题。我的想法很简单,自定义一个组件,这个自定义组件就是一个 LinearLayout,背景设置为一个图片,图片路径为:res/drawable/bg.png, 通过出 this.setBackgroundResource (R.drawable.bg) 实现,按照上述的步骤输出为 jar 后,给另一个 app 调用,发现图片根本无法输出,老是显示调用者的默认 Icon.
反编了一下百度地图 jar,发现它所有图片都是放在 assets 中,并不是放在 res/drawable 中,然后再查看了一下代码,其对图片的调用是通过 AssetManager.open () 方法来实现的,并非通过 R.drawble 来实现,修改后的代码如下:
private void init() {
try {
//获取图片转换为Bitmap
AssetManager localAssetManager = this.getResources().getAssets();
String str = "home_pressed.png";
InputStream localInputStream = localAssetManager.open(str);
Bitmap localBitmap = BitmapFactory.decodeStream(localInputStream);
localInputStream.close();
//把Bitmap图像转换为Drawable
Drawable drawable = new BitmapDrawable(localBitmap);
//设置背景
if(localBitmap != null){
setBackgroundDrawable(drawable);
}
} catch (Exception e) {
e.printStackTrace();
}
}
http://file.adobex.com/uploadfile/2011/1208/20111208121038195.zip
转载:http://www.adobex.com/android/source/details/00000429.htm
angularjs如何使用第三方库?angularjs使用第三方库详解
本篇文章介绍了angularjs如何使用第三方库,有哪些第三方的库是可以让angularjs使用的,让我们带着问题一起进入文章。
Angular 的组件与模块看似好像与现有各种第三方类库(例如:lodash、moment 等)使用上有点格格不入,这很大的原因是 TypeScript 造成的假象。三足鼎立的前端其实都是雷同的,不管是哪种前端框架都可以使用到这些第三方类库。
以下我将从另一个视角解释 Angular 如何使用第三方类库的一种经验做法。
一、写在前面
在开始之前,需要先了解一下 TypeScript 模块系统 ——模块是指在其自身作用域里执行,而不是在全局作用域里;模块间是依靠 export 和 import 建立关系。编译器在编译过程中,也是依赖这种关系来定位需要编译的文件。
TypeScript 依然还是以 JavaScript 文件的形式发布类库,这会导致类型无法表述,需要配合声明文件对其进行类型描述;因此声明文件成了类库一个必不可少的组成部分。
二、分类
Angular 使用 TypeScript 语言开发,诚如上一小节讲来说,要想让一个类库被运用,要件是有没有声明文件。
有声明文件
要分清类库是否有声明文件 *.d.ts,可以从两个方面来确认这件事:
1、类库自带
从 Npm 安装一个依赖包后,可以直接检查其库的 package.json 是否包含 typings 节点,例如 moment:
"typings": "./moment.d.ts"
2、TypeSearch检索
TypeScript 提供了一个叫 TypeSearch 网站,可以直接输入关键词检查是否包含该类库的声明文件。
例如 lodash 可以在列表中点击会跳转至 npm 网站,并且会看到这样的一个命令:
npm install --save @types/lodash
无声明文件
这类情况还蛮常见,例如早一点时间 G2 就没有声明文件,这种情况下只能自行编写声明文件。
Angular Cli 创建的项目会包含一个 src/typings.d.ts 声明文件,它会自动包含在全局声明定义中,而把这些类库的声明信息写在这里面再好不过。
一般而言自己很难对一个类库写一个完整的声明文件,这对于成本来说太不合算,因此往往都是只对部分全局对象做一个 any (表示忽略该静态类型检查)亦可,例如:
// src/typings.d.ts declare var G2: any;
三、如何使用?
声明文件是纽带,依然以这种方式来划分如何使用。
对于有声明文件,无需额外做什么,只需在需要模块的地方使用 import 来导入即可,例如:
import * as moment from ''moment''; moment(); // 当前时间
无声明文件
重要来看无声明文件时怎么做,前面说到使用 any 来表示忽略静态类型检查,意味者无法享受声明文件带来的智能提示快感。
像 G2 ,我们可以在项目的任意位置直接使用它,但也仅仅只能识别 G2 变量,而实例的方法或属性是不可知的。
// app.component.ts const g2 = new G2(); g2. // 输入 `.` 后是不会有任何方法或属性
除此之外 TypeScript 编译过程中也不会对 G2 做任何类型检查,G2 是否真的存在只能由自己把握。对于 Angular 而言,是需要额外在 .angular-cli.json 的 scripts 节点上明确加载这些模块。(想看更多就到PHP中文网AngularJS开发手册中学习)
// .angular-cli.json "scripts": [ "../node_modules/@antv/g2/dist/g2.min.js" ]
TypeScript 编译后依然还是 JavaScript 代码,假如不手动加载 G2 相关 JavaScript 文件,自然在运行过程中会提供未找到 G2 的错误。
总结
从 TypeScript 的视角来看如何使用第三方类库,会有不同的感觉,只是一个简单的非靠谱但有效的描述。希望懂得多的人手下留情。
这里无意黑 G2 的意思,现 G2 已经提供了声明文件了。
好了,本篇文章到这就结束了(想看更多就到PHP中文网AngularJS使用手册中学习),有问题的可以在下方留言提问。
以上就是angularjs如何使用第三方库?angularjs使用第三方库详解的详细内容,更多请关注php中文网其它相关文章!
我们今天的关于HandyJSON第三方库的日常使用与错误记录的分享已经告一段落,感谢您的关注,如果您想了解更多关于055 Python第三方库安装、3、python第三方库的安装方式、Android 引用第三方库的方法、angularjs如何使用第三方库?angularjs使用第三方库详解的相关信息,请在本站查询。
本文标签: