如何在 Swift 中使用 getData() 和 ObjC PNChart 库绘制折线图?

2024-01-16

我是一名新手程序员,最近开始学习 Swift。

我正在 Swift 中制作一个项目,我的目的是在引入参数的同一视图中绘制用户引入的信号函数(使用由 PNLineChart 类控制的子视图)。

事实上,我使用 CocoaPods 安装了 PNChart 库,并使用 Objective C 标头的桥接标头。问题是,在 ObjC 中使用类和方法的方法是将它们“翻译”为 Swift 语法。我发现 PNChart 有作者制作的 Swift 实现,但 Pods 不提供(如果有人知道如何将它们放入我的项目中,也会很有帮助)。

好吧,作者在其 wiki 中给出的绘制数组图的 ObjC 代码如下:

#import "PNChart.h"

//For Line Chart
PNLineChart * lineChart = [[PNLineChart alloc] initWithFrame:CGRectMake(0, 135.0, SCREEN_WIDTH, 200.0)];
[lineChart setXLabels:@[@"SEP 1",@"SEP 2",@"SEP 3",@"SEP 4",@"SEP 5"]];

// Line Chart No.1
NSArray * data01Array = @[@60.1, @160.1, @126.4, @262.2, @186.2];
PNLineChartData *data01 = [PNLineChartData new];
data01.color = PNFreshGreen;
data01.itemCount = lineChart.xLabels.count;
data01.getData = ^(NSUInteger index) {
    CGFloat yValue = [data01Array[index] floatValue];
    return [PNLineChartDataItem dataItemWithY:yValue];
};
// Line Chart No.2
NSArray * data02Array = @[@20.1, @180.1, @26.4, @202.2, @126.2];
PNLineChartData *data02 = [PNLineChartData new];
data02.color = PNTwitterColor;
data02.itemCount = lineChart.xLabels.count;
data02.getData = ^(NSUInteger index) {
    CGFloat yValue = [data02Array[index] floatValue];
    return [PNLineChartDataItem dataItemWithY:yValue];
};

lineChart.chartData = @[data01, data02];
[lineChart strokeChart];

所以我尝试将其转换为 Swift,其中:

  • 输入信号:UITextField! -> 将是用户介绍数学函数的文本字段(仍在开发中)
  • 其他 IBOutlet -> 设置功能限制和全局图表限制的参数
  • 输入SignalLineChart:PNLineChart! -> 将子View连接到ViewController
  • initSignalExample -> 用于测试绘图的初始数组
  • signalObtainedValues -> PNLineChartData 类型的声明

在 viewDidLoad() 函数内,我启动一个初始图表来测试它是否在视图中工作。当我尝试使用 PNLineChartData 类中定义的方法 getData() 时,问题就出现了,但我实际上无法将其转换为正确的 Swift 代码。

我的理解是 getData 有一个名为 index 的 UInteger 作为输入(我认为它会选择单个数据,但我没有看到它在任何地方声明:-/),并且作为输出它返回一个 PNLineChartDataItem()。正如我在 ObjC 代码中看到的,执行此操作的方法有点类似于 PNLineChartDataItem(y: CGFloat),所以我想我可以执行下面向您展示的代码:

import UIKit


class ViewController: UIViewController, PNChartDelegate{


    @IBOutlet weak var inputSignal: UITextField!

    @IBOutlet weak var initialTimeInputSignal: UITextField!

    @IBOutlet weak var finalTimeInputSignal: UITextField!

    @IBOutlet weak var initialGlobalTime: UITextField!
    @IBOutlet weak var finalGlobalTime: UITextField!

    @IBOutlet weak var inputSignalLineChart: PNLineChart!

    let screenWidth = UIScreen.mainScreen().bounds.size.width
    let screenHeight = UIScreen.mainScreen().bounds.size.height
    let initSignalExample = [0.0, 1.0, 1.0, 1.0, 0.0]
    let signalObtainedValues: PNLineChartData!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        view.backgroundColor = UIColor.cyanColor()

        inputSignalLineChart.delegate = self
        inputSignalLineChart.frame = CGRectMake(0, 135.0, screenWidth, screenHeight)
        inputSignalLineChart.backgroundColor = UIColor.whiteColor()
        inputSignalLineChart.setXLabels(["0","1","2","3","4"], withWidth: 1)
        //signalObtainedValues.color = UIColor.greenColor()
        //signalObtainedValues.itemCount = UInt(inputSignalLineChart.xLabels.count)

        signalObtainedValues.getData(UInt(index)) = { PNLineChartDataItem(y: CGFloat(initSignalExample[index]))

        }

        //inputSignalLineChart.chartData = [signalObtainedValues]
        inputSignalLineChart.strokeChart()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

尝试和尝试我只得到错误:无法分配给该表达式的结果,在 getData() 行中。所以我认为这是我用 Swift 编写的代码的语法。有谁知道如何执行此操作并在子视图中正确绘制图表?任何答案或有用的提示将不胜感激。谢谢你!


也许这可以写成如下的闭包:

signalObtainedValues.getData() = {
    index in
    let yValue: CGFloat = initSignalExample[UInt(index)]
    return PNLineChartDataItem(y: yValue)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Swift 中使用 getData() 和 ObjC PNChart 库绘制折线图? 的相关文章

  • 如何将 4 个字节转换为 Swift 浮点数?

    我正在用 Swift 编写一个 MsgPack 解析器作为学习该语言的一种方式 感觉不太适合这项任务 但我一直在进步 现在我遇到了一个块 我似乎无法说服它将 4 个字节转换为浮点数 var bytes Array
  • 从 iPhone 设备查找当前国家/地区

    我必须在 iPhone 设置中获取当前国家 地区 谁能告诉我如何在 iPhone 应用程序中获取当前国家 地区 我必须使用当前国家 地区来解析需要传递当前国家 地区的 RSS 提要 请帮我找到那个国家 提前致谢 要查找用户选择的语言所在的国
  • 检测用户何时清除通知中心的通知

    我的应用程序需要知道用户是否使用清除按钮从通知中心删除 清除应用程序通知 是否可以检测用户何时从通知中心删除通知或抓取通知中心上的一组通知 你 即App 无法与NotificationCenter交互 NotificationCenter与
  • 使用 Python-AppKit-Objective C 转换为预组合 Unicode 字符串

    苹果公司的这份文件技术问答 QA1235 http developer apple com qa qa2001 qa1235 html描述了一种将 unicode 字符串从组合版本转换为分解版本的方法 由于我对包含某些字符 例如重音符号 的
  • OSX Swift 在默认浏览器中打开 URL

    如何使用 Swift 作为编程语言和 OSX 作为平台在系统默认浏览器中打开 URL 我发现了很多UIApplication like UIApplication sharedApplication openURL NSURL string
  • Swift - 必须由子类覆盖的类方法

    是否有一种标准方法可以在 Swift 中创建 纯虚函数 即 一个must被每个子类覆盖 如果不是 会导致编译时错误 您有两个选择 1 使用协议 将超类定义为协议而不是类 Pro 编译时检查每个 子类 不是实际的子类 是否实现了所需的方法 C
  • 使用按计数分组的核心数据获取属性

    这是我想为 Core Data 编写的查询的 SQL 版本 SELECT Group Name COUNT Item Name FROM Item INNER JOIN Group ON Item GroupID Group ID GROU
  • 在启用滚动的情况下扩展堆栈视图内的 UITextView

    我正在尝试使用自动布局和 Stackview 来实现一些目标 我有一个垂直 Stackview 其中包含 UIView UITextView 和 UIView 如下所示 我已经在这里查看了以前的答案 但找不到一个干净的解决方案来实现此目的
  • 在 UICollectionView 下面插入子视图

    当我在 UICollectionView 下方添加子视图时 有时子视图会显示在 UICollectionView 单元格上方 这是子视图插入代码 self collectionView insertSubview self garmentV
  • 每个 CPU 核心处于 C0 电源状态的时间

    任何帮助弄清楚如何做到这一点都会很棒 在过去一秒内 每个 CPU 核心处于 C0 电源状态的时间有多少 这是针对 Mac 应用程序的 因此需要 Objective C cocoa 和 c OS X 没有任何公开 CPU c 状态的 API
  • Swift UINavigationController 子类中的强制 init 覆盖

    我目前正在子类化UINavigationController对于服务视图控制器流的框架 在某种程度上 就像UIImagePickerController do 这是我的实现示例 尽可能简单 可以在操场上运行 import UIKit pub
  • 使用 FFT 执行音频分析

    我已经被这个问题困扰好几天了 并且浏览了几乎所有相关的 StackOverflow 页面 通过这次活动 我现在对 FFT 是什么及其工作原理有了更深入的了解 尽管如此 我在将其实现到我的应用程序中时遇到了极大的困难 简而言之 我想做的是为我
  • iOS AVCaptureVideoDataOutput 消耗太多内存

    我在用AVFoundation使用iPhone相机捕获视频的框架 我的代码 self session AVCaptureSession alloc init self output AVCaptureVideoDataOutput allo
  • 小视频播放

    根据我从互联网收集的信息 MPMoviePlayerController 类不支持小视频播放 因此 为了死马当活马医 我想知道可以使用什么样的方法来让小视频在屏幕的一角播放 而不中断屏幕的其余部分 到目前为止 我们已经遇到了两种可行的解决方
  • 解包可选值时意外发现 nil - 使用 ALAMOFIRE

    我正在尝试使用 Alamofire 获取 JSON 格式的数据 当我使用一个 URL 时 它工作正常 当我使用另一个 URL 时 我在解包可选值时收到错误 我似乎无法追踪错误来自哪里 我已采取将代码放入 ViewDidLoad 来跟踪错误
  • Facebook iOS 选择好友表空白

    我正在尝试将 选择的朋友 添加到我的 iOS 应用程序中 我设置了登录视图 登录后 我打开朋友选择器 但它显示为空白 我看到带有 完成 和 取消 按钮的表 但表中没有加载任何朋友 IBAction selectFriendsButtonAc
  • ios Facebook 添加 FBNativeAdView 作为子视图

    我想使用预建视图FBNativeAdView 不想自定义 FBNative 广告 如link https developers facebook com docs reference ios current class FBNativeAd
  • 启动使用 Simperium 的应用程序时 objectFromJSONString 崩溃

    我得到了一个JSON当我尝试启动使用 Simperium 框架的应用程序时崩溃 NSCFString objectFromJSONString unrecognized selector sent to instance 0x6c561a0
  • 如何快速从解析中加载图像?

    我想知道是否有人可以帮助我 我是应用程序开发的新手 我正在从我的应用程序上传图像以在解析文档的帮助下毫无问题地进行解析 let imageData UIImagePNGRepresentation scaledImage let image
  • 从基元创建自定义形状

    我正在尝试通过组合原始形状来创建自定义物理形状 目标是创建一个圆形立方体 合适的方法似乎是初始化 形状 变换 我在这里找到的https developer apple com library prerelease ios documenta

随机推荐

  • 嵌入或引用关系

    我使用 mongodb 和 mongoid gem 我想得到一些建议 我有一个应用程序 其中用户has many市场与市场has many产品 我需要在属于用户的所有 或任何 市场中搜索特定价格范围内的产品 哪种关系更适合这种情况 嵌入关系
  • ActiveRecord :includes - 如何使用带有加载关联的地图?

    我有一个小型 Rails 应用程序 我正在尝试获取一些订单统计信息 所以我有一个管理模型和一个订单模型 具有一对多关联 class Admin lt ActiveRecord Base attr accessible name has ma
  • 多线程将对象引用传递给静态帮助器方法

    我只是 Java 的初学者 偶然发现了多线程应用程序 我知道这个问题与这里的一些帖子类似 但我找不到更好的答案来回答我的问题 基本上 我想将对象传递给静态方法 该方法将仅根据对象的值 属性返回输出 对于每次调用 我都会创建该对象的一个 新实
  • 视图控制器可以访问传入 Segue 的标识符吗?

    视图控制器可以访问用于转换到它的 Segue 的标识符吗 例如 我使用带有标识符 mySegue 的 Segue 从视图控制器 A 转换到视图控制器 B 无论如何 视图控制器 B 是否可以获取 segue 的标识符 我不相信有这样的财产 这
  • JAX-RS 中的 @Produces 注释

    我的服务方法产生其中之一MediaTypes它可能会产生pdf or excel文件或其他 Produces application pdf application vnd ms excel 我的问题 我的服务返回响应类型applicati
  • 在 Swift 中使用实时滤镜录制视频

    我是 swift 的新手 试图构建一个相机应用程序 它可以应用实时滤镜 并使用应用的滤镜进行保存 到目前为止 我可以使用应用的滤镜实时预览 但当我保存视频时 它全黑了 import UIKit import AVFoundation imp
  • 发布模式出错,但调试模式下不出错

    我的代码在调试模式下运行良好 但在发布模式下失败 这是我失败的代码片段 LOADER gt AllocBundle m InitialContent while m InitialContent isReady this gt Loadin
  • 带 Plotly 的树形图:空白屏幕?

    我正在使用 R 编程语言 我正在尝试遵循此处提供的答案 R 中使用plotly 绘制树形图 https stackoverflow com questions 72179306 treemap plot with plotly in r 我
  • “索引签名参数类型不能是联合类型。” – 我应该用什么来代替?

    当我尝试编译此 Typescript 代码时 interface Foo foo hello world string 我收到此错误消息 索引签名参数类型不能是联合类型 考虑改用映射对象类型 什么是映射对象类型 如何使用它 映射的对象类型对
  • 检查变量是否是字符串的简单方法?

    这个问题是一个衍生问题 是 Array 的实例 但 不是 String 的实例 https stackoverflow com questions 12254658 is an instance of array but isnt of s
  • 使用 Microsoft Graph 客户端创建日历事件

    我正在尝试弄清楚如何使用 Microsoft Graph JavaScript 客户端创建日历事件 我已经设法找回必要的accessToken并且可以与 API 交互 即检索事件 日历 前 10 封电子邮件 但我不确定如何使用 API 来创
  • Laravel 4:如何更新 Eloquent 模型中的多个字段?

    如何更新 Eloquent 模型中的多个字段 假设我是这样得到的 user User where username rok 然后我就有了所有这些模型参数 new user data array email gt email protecte
  • ZF2 - Zend Framework 2,了解路由

    我正在尝试了解 ZF2 中的模块路由 目前我只能为单个操作创建一个控制器 并且正在努力找出这个路由 我查看了其他模块和插件 我有点明白了 只需要一点点推动就可以 得到它 在此示例中 我尝试路由到两个操作 indexAction 和 cmst
  • 粘贴前检查剪贴板的内容

    在Excel VBA中粘贴之前是否可以检查剪贴板的内容 我今天有这个 Sheets Add After Sheets Sheets Count Create new sheet ActiveSheet Paste Paste from Cl
  • Android 按钮位置编程

    我的应用程序中有一个按钮 我想以编程方式更改其位置 我在 XML 中创建了一个按钮 如下所示
  • 如何使用 phinx 编写迁移来插入记录?

    我在用着phinx http docs phinx org 为了处理新项目的迁移 现在我需要创建一个新表并向其中插入一些行 我有 tableStatus this gt table status tableStatus gt addColu
  • PERF_TYPE_HARDWARE 和 PERF_TYPE_HW_CACHE 并发监控

    我正在研究一个自定义实现perf event open系统调用 该实施旨在支持各种PERF TYPE HARDWARE PERF TYPE SOFTWARE and PERF TYPE HW CACHE活动为任何核心上的特定线程 In 英特
  • argparse —— 可选参数需要 2 个值或没有值

    我正在尝试为脚本创建一个可选参数 该参数可以不带任何值 也可以带 2 个值 仅此而已 你能使用 argparse 来完成这个任务吗 desired output script py a gt works script py a val1 g
  • 扭曲的延迟/回调和异步执行

    我试图弄清楚如何使用twisted使我的代码更加异步 函数返回一个延迟对象 然后我添加回调列表 延迟函数通过以下方式提供一些结果后将调用第一个回调deferred obj callback 然后 在回调链中 第一个回调将处理数据并调用第二个
  • 如何在 Swift 中使用 getData() 和 ObjC PNChart 库绘制折线图?

    我是一名新手程序员 最近开始学习 Swift 我正在 Swift 中制作一个项目 我的目的是在引入参数的同一视图中绘制用户引入的信号函数 使用由 PNLineChart 类控制的子视图 事实上 我使用 CocoaPods 安装了 PNCha