-
本篇笔记的背景前提:
要采用和
Android
一致的图表界面 MPAndroidChart。所以选择了同一作者
以Swift
写的图表库 Charts。
因为工程太大,所以依旧是用Objective-C
编写的工程,没有转型Swift
编写工程。
那么,自然的,我就得选择Objective-C与Swift混编
。此处工程的前提是:Xcode 8.2.1
,Charts 3.0.1
此处工程的前提是:Xcode 8.3.1
,Charts 3.0.2
此处工程的前提是:Xcode 9.0.1
,Charts 3.0.4
此处Demo的环境是:Xcode 9.3
,Charts 3.1.1
-
如果,你的工程恰巧也是
Objective-C
编写的,而今要使用Charts
。那么,请继续往下看。如果,你的是Swift
创建的工程,也要使用Charts
。那么,抱歉了。我的这篇笔记,好像帮不上任何忙。毕竟Swift
调用Swift
写的Charts 库
,应该是调用很自然的。
很多用到Objective-C和Swift混编
的开发者都知道,混编在编译、运行的时候,挺慢的。尤其是,工程代码量越大,运行越慢。而此处的Charts库
本就很大。编译慢在所难免。何况在Xcode 8
中Swift
本身就编译颇慢。Objective-C
和Swift
的混编,在Xcode 8.3
之后,稍有改观,编译和运行会快一些。很多开发者大概知道很多图表库,诸如:ECharts
、ZFChart
等等,但是,由于我在开发中需要与Android
端采取同样界面的图表库。所以,我只能选择这个Charts库
进行混编。
如果,你仅仅需要一些简单的图表功能,又是Objective-C
工程,不需要和Android
保持界面相同,并且想要靠谱的编译速度,那就不太建议用这个库。甚至建议你手码一个图表库
。
考虑到性能问题的(比如内存),建议使用WKWebview
加载本地Echarts图表页面
。
-
准备工作:
在此假设你已经安装好
Cocoapods
了。
如果你还未安装Cocoapods
,请参考此链接:Cocoapods安装&解决安装错误&使用已经创建好了一个由
Objective-C
编写的工程。然后,关掉该打开的工程。
-
Tips:
如果你很熟练使用pod命令
,请跳过以下内容。如果不熟练,这里给出了还算详细的过程供予参考
。 -
打开
终端
或者ITerm
。 -
依次执行如下命令行:
cd 把工程直接拖过来 //敲击return键
//新建一个Podfile文件 touch Podfile //敲击return键
//使用xcode打开文件 open -a xcode Podfile //敲击return键 //在 Xcode 打开的 Podfile文件 中编辑你需要内容
-
在Xcode打开的Podfile中,输入如下内容:
platform :ios, '8.0' use_frameworks! target 'testCharts' do pod 'Charts' pod 'ChartsRealm' end
-
导入库
pod install
//双击 .xcworkspace 文件,打开工程 //或者使用命令行打开 open -a xcode Hi.xcworkspace
-
创建Swift文件,以此来创建桥接文件。
-
配置
-
Tips:此时编译,会出错。因为
Swift 库
的Swift Language Version
的问题。 -
以下是编译后出现的错误:
Error:
The “Swift Language Version” (SWIFT_VERSION
)build setting
must be set to a supported value for targets which useSwift
. This setting can be set in thebuild settings
editor.错误的意思很简单,就是
Cocoapods 管理的第三方框架
版本
出现了一些问题。解决办法(无论是否编译,均需走此配置):
选择Pods -> Targets -> Charts/ChartsRealm/RealmSwift -> Swift Compiler - Language -> Swift Language Version -> Swift x.x
,即把 Unspecified 改成最新的Swift版本
即可。
如果是个别框架
的问题,则需要单独选择某个框架来设置Swift Language Version版本
。-
特别注意:
此处,先Clean一下,再编译一下 -
在
桥接文件
项目名-Bridging-Header.h
中,写上要引用的Swift头文件。
@import Charts;
-
-
测试:
-
在ViewController.m中加入如下测试代码:
#import "ViewController.h" #import "Hi-Bridging-Header.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor grayColor]; BarChartView *chartView = [[BarChartView alloc] initWithFrame:self.view.bounds]; chartView.backgroundColor = [UIColor colorWithRed:0.184 green:1.000 blue:0.738 alpha:1.000]; [self.view addSubview:chartView]; } @end
-
Tips:当然,此时此刻,你可以把之前创建的
swift文件
删除掉了。
-
-
运行效果如图:
-
因为没有数据。所以,只要这样的提示。此时,表示已经集成成功。
-
-
Error
的处理:如果,你之前已经在项目中使用了
Charts图表库
。
而现在,Charts 库
已由Swift 2.3
Swift 3.0
版本升级为Swift 3.0
Swift 4.0
版本。
如果你未执行pod update
,却以8.3版本以后的Xcode
打开了工程,会有如下图所示的提示Swift 版本
的更新。所以,需要在
Podfile
文件的内容中,即 最后一行pod 'xxx'
和 末尾的end
之间加入这样一段代码。-
如下所示。
# Swift2.3升级到Swift3,语法有比较大的改动,所以在Xcode 8下需要设置Swift的版本适配语法问题。 # 方法一: # 使用CocoaPods,在 Podfile 添加 SWIFT_VERSION 配置,然后执行 pod install。Podfile添加配置如下 # 如果是适配2.3,那么改为config.buildsettings['SWIFTVERSION'] = '2.3' Unspecified 改为YES或者NO (其实,默认Xcode 8默认是NO) post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['SWIFT_VERSION'] = '3.0' end end end # 方法二: # 打开项目或者库的Build Settings。 # 把Swift Compiler Version属性"Use Legacy Swift Language Version"把 # 其实,上面这段代码可以废弃了。直接从上面的 配置 一栏中讲到的 Swift Language Version 设置即可。
-
-
Charts折线图·简单使用
-
抽空我会上传到
github
具体demo
,纯 Objective-C 代码版创建Charts
。注释,我会尽可能写的详细些。` -
Github上 Charts demo地址 · 请点击
-