尽管我对iOS图表还很陌生,但是我在其中进行了大量的工作,并且接触到它的许多不同方面。 从自定义轴值格式器和数据集的简单端到更复杂的概念,例如自定义条形图,组合图以及其他图表和渲染器。 本文特别关注一个简单的主题,源于我在iOS图表GitHub页面上看到的有关自定义y轴标签的最新问题。 这个问题并不是最复杂的。 但是,我希望有人被卡住,他们会偶然发现本文,并为他们指明正确的方向。 让我们开始吧。 惊喜! 在本文中,我们不会讨论如何设置iOS项目。 如果您还不知道如何操作,请搜索Medium,我相信有很多很棒的文章可以帮助您入门。 这的主要任务比您想象的要容易得多。 只需创建一个新类,使其符合IAxisValueFormatter ,并实现所需的stringForValue函数即可。 在stringForValue函数内部,您将在其中处理有关如何格式化轴标签的逻辑。 使用自定义轴格式化程序可能会很有创意,因此我敦促您熟悉它们,并看看它们可以为您做什么。 在此示例中,我们将假设我们的数据集仅包含0到4的y值。 我们的格式化程序将转换我们的y值0–4,并将其显示为从“ 强烈反对”到“ 强烈同意” 。 一致性 让我们从创建我们的类MyCustomAxisValueFormatter并使它符合IAxisValueFormatter 。 如您所见,我们有一个必须解决的错误。 我们必须实现stringForValue以满足IAxisValueFormatter协议要求。 实现stringForValue 如前所述,这是我们要返回要在轴上显示的特定值的字符串的地方。 让我们从简单地返回值的整数作为字符串开始,以了解该方法的工作原理。 添加自定义逻辑 接下来,我们将创建一个枚举来代表我们的价值观的不同状态。 这将提供一种表示我们的值的方式,并在y轴上为标签提供一个字符串。 现在我们有了带有Int rawValue的枚举,我们可以将我们的值转换为Int ,初始化一个AgreementRating ,然后使用该等级设置轴标签。 注意:为简单起见,我忽略了错误处理,因为我保证值为0–4。 但是,在现实世界中, 请勿强行打开包装并忽略失败的可能性,否则您的应用程序可能会崩溃。 配置图表轴 作为确保图表仅显示这五个标签的最后一步,我们需要在左轴上设置几个属性。 在那里,您拥有了! 带有自定义y轴标签的图表,其呈现的不仅仅是一个简单的整数/双精度值。 (是的,这是带有圆条的条形图的自定义实现。可能很快就会出现!) 现在,我们已经看到了如何创建自定义轴值格式化程序,并使用它来显示与简单数字值完全不同的字符串。 对于x轴和y轴,这些自定义格式器的功能可能非常强大。 感谢danielgindi提供出色的iOS图表库。 去看看GitHub仓库! 链接资源。 iOS图表-https://github.com/danielgindi/Charts
面向对象的程序面向对象的对象面向对象的对象面向对象的对象面向对象的对象面向对象的对象 anu buyazıyıokuyorken胆dünyadaaynı和birsürüşeygerçekleşiyor。 Neyazıkki sahipolduğumuzprogramlamaaraçlarıbu tarz bidünyabakışaçısınıifade etmekteçokiyideğillerdir。 Fakat concurrency’ianlayıp ,添加或删除了其他内容。 Bende bu konunun biraz dahakavranmasıadına31 Ekim’de Trendyol’un的赞助者luğundabu konuyla ilgili bir sunumyaptım。 100–150’yeyakınarkadaşgeldi hepsineteşekkürlerimiiletiyorum。 Güzelinteraktif bi sunum oldu。 Sunumda并发,并行,中央调度(GCD)。 Uygulamalararımızınasılyapılandırmamızgerektiğindenbahsettim。 Sunumagözatmak istersenizaşağıyabırakıyorum。
在开始阅读本文之前,我强烈建议您继续阅读以下文章。 了解协议-iOS 通过委托和协议在ViewController之间传递数据 与往常一样,让我们如下设置基本协议和类。 如果您已经阅读了我以前关于Protocol的文章,我希望下面的代码可以自我解释。 否则,出于上述相同原因,也会抛出如下错误 您已经猜到了,扩展中的方法仅适用于已确认该扩展之母的类。 在这种情况下,它具有战争能力。 如果我把所有事情都放在一个文件中。 它看起来应该像下面这样。 希望您从本教程中学到了更多有关协议的知识。 祝好运!
我喜欢使用Swift进行编程,就像喜欢使用Objective-C或Python或C#进行编程一样,因此,本文并非旨在偏爱这两种语言。 在以后的文章中,我将尝试介绍您可以使用Swift进行的操作,但是不能使用Objective-C进行的操作。 话虽这么说,但是在写了很长时间的Objective-C之后,有时用纯 Swift进行编程时似乎缺少一些工具,尽管通常有一些方法仅使用Swift就能获得大致相同的结果。 用Objective-C编写的许多应用程序和框架都依赖于这些工具,有时还依赖于骇客,这使我们的代码更简洁,更易于使用。 我将以可能是Objective-C中最具争议的主题开始我的列表。 1.)方法混乱 混乱是有争议的,因为它允许您通过更改类选择器的实现来在运行时更改类的行为。 这意味着您可能会拥有一项服务,该服务为您提供类名或方法名作为字符串,并更改应用程序在运行时的行为方式。 不能从NSObject继承而来的纯Swift类(我们想要转换为@dynamic缺乏此功能,但本质上动态性较低且类型安全的语言首先吸引了大多数Swift开发人员。 那里有许多Objective-C框架/库,它们使用方法混乱使我们的生活更轻松并且代码更简洁。 Aspects是一个功能强大的库,它使用复杂的特性使在Objective-C中实现面向方面的编程成为可能。 这使您能够为诸如应用程序分析之类的事情实现非侵入式代码,如另一个库ARAnalytics中所示。 OCMock在很大程度上依赖于Objective-C运行时,而Swift并没有真正支持它。 Rollout.io使用方法混乱,将实时更新推送到您的应用程序。 Rollout.io发生了一个有趣的发展,他们在其中描述了他们甚至如何使用Swift应用程序进行实时更新! 2.)C ++互操作 Objective-C通过名为Objective-C ++的结构支持与C ++代码的互操作性。 许多项目/库都使用C ++作为其核心组件,以便能够更快地交付该库的跨平台版本,而不是用平台的本地语言重写整个库。 PSPDFKit和Realm是很好的例子。 当然,您可以将C ++代码包装在C或Objective-C中,然后通过Swift与该代码对话,但这会增加代码量和代码库的维护量。 3.)performSelector: performSelector:是NSObject类的实例方法,该方法将指定的消息发送到接收方并返回消息的结果。 在这样的对象上进行方法调用会触发一系列事件,这些事件将调用objc_msgSend函数(在Swift中也不可用)。 如果该类的方法调用存在实现,则该函数进行查找,否则,将其链接到超类,直到到达NSObject的根级别为止,在该根级它将引发unrecognized selector sent to instance ,该unrecognized selector sent to instance NSInvalidArgumentException 。 这种机制使您可以在不预先知道对象类型的情况下向对象发送消息,如下所示: 类personClass = NSClassFromString(@“ Person”); id object = [personClass new]; NSString * name = […]
您已决定编写样式指南。 为什么? 写原因的原因是什么,您如何说服团队成员遵循样式指南? 最近,我正在大型代码库中进行此过程。 我想提出一些合理的理由来推动它,而不只是预感它将使事情变得更好。 我得出的结论是,您实际上不需要样式指南。 但是,指南可以减少开发人员的认知负担。 它还具有使您的代码看起来整洁的漂亮副作用。 看到好处的最简单方法是类比英语。 首先是一个没有标点符号的块: 有大量的编码约定,有关大量示例和讨论的信息,请参见编码样式。常见的编码约定可能涵盖以下领域:注释约定缩进样式约定行长约定命名约定编程实践编程原则编程规则拇指编程风格约定 其次,一个带有标点符号的块: 有许多编码约定。 有关大量示例和讨论,请参见编码风格。 通用编码约定可能涵盖以下领域: *评论约定 *缩进样式约定 *行长约定 *命名约定 *编程习惯 *编程原理 *编程经验法则 *编程风格约定 这个简单的示例显示了一段文本上的格式差异。 它强调了样式指南的要点:必须使代码更清晰,以供开发人员阅读。 当我上大学时,我曾经使用在游戏编程中学到的技术来编写我认为很糟糕的作业。 诸如迭代数组指针而不是使用for循环之类的技术。 我最终为此受到了惩罚,因为我的主管发现代码难以理解并且不熟悉这些技术。 考虑到这样的普遍格言,即代码被读取的次数超过了编写的次数,我认为提高代码的清晰度很重要。 这意味着我们所有人都应尝试以相同的方式编写代码并以相同的方式设置其格式。 幸运的是,我们有Apple和Xcode在这里指导我们。 我们只需要遵循Apple的风格,并在Xcode中使用自动完成风格,我们将以成千上万的开发人员可以理解的方式进行编写。 如果这还不够的话,Realm还创建了出色的SwiftLint用于执行样式指南。 另外,Swift-Clean的工作人员还会进行调查,您可以在其中轻松生成样式指南,并将其与其他开发人员的答案进行比较。 那么样式指南是吗? 它们不是必需的,但是如果您重视所做的事情并希望使代码更好,那么这是提高项目整体质量的简单方法。 只是不要成为您的风格指南的奴隶,比如用英语写作时,有时我们会出现语法错误,而有时这些错误是更好的选择。
每个大型结构都有基本单元,这些基本单元组合在一起,对整个结构有意义。 例如,砖块,水泥,油漆,混凝土等构成建筑物上的基本构建块。 同样地,在我们继续讨论功能性反应式编程的广泛领域之前,如果我们了解将要结合在一起的基本构建模块,以便使我们创建的大量应用程序有意义,那将是非常棒的。 FRP的基本构建模块,从事件流开始。 事件流可以定义为随着时间推移发生的一系列事件。 您可以将其视为异步数组。 下图显示了事件流的简单描述: 如您所见,我们在箭头上表示了时间,该箭头从左到右对齐,向前移动到右边,事件随时间而发生。 在时间轴上间歇性地绘制的彩色气泡(由其名称指示)表示事件 。 我们可以在整个序列中添加一个事件侦听器,并且每当事件发生时, 我们都可以通过做一些事情来与之互动 ; 那是主要思想! 在Swift中,我们还有许多其他类型的序列,例如数组: 假设我们有一个eventStream数组: var eventStream = [“ 1”,“ 2”,“ abc”,“ 3”,“ 4”,“ cdf”,“ 6”] 让我们尝试将eventStream与数组进行比较; 数组是空间中的序列,这意味着eventStream数组中的所有项目现在都存在于内存中; 另一方面,eventStreams没有该属性。 事件可能随着时间而发生,您甚至都不知道所有可能发生的事件以及何时发生。 S o,如果我们必须在数组和事件流之间建立联系,那么我们可以断言,如果[[1],“ 2”,“ abc”,“ 3”,“ 4”,“ cdf”,“ 6” ]值会在一段时间内发生,并且不只是从头开始存在于内存中,前面的数组将像事件流一样,其中事件“ 1”可能在第一秒发生,事件“ 2”可能在第四秒发生,事件“ abc”可能会在第10秒发生,依此类推。 在这里,请注意,事件发生的时间和事件的类型都不是事先知道的。 事件仅在发生时解决。 事件流的好处是它们具有类似于数组的功能。 假设我们的问题是在给定数组中添加所有数字。 数组的解决方案 :如您所见,数组中的元素不是数字; 它们是字符串,因此我们必须在此处进行一些转换,然后遍历循环以过滤掉无法转换为数字的字符串,然后将其余部分(如果它们是有效数字)相加。 我们可以使用for循环遍历数组,但是当我们遍历for循环内的数组时,我们将使用map和filter操作来提供问题的解决方案,这是功能性方法: 第一步 : 让result = […]
使用Cloudkit,以及在iOS和Swift中进行本地化 因此,我的最新应用程序在8个月内就淘汰了8个应用程序(现在我最多有6个应用程序,其中3个贴纸包为1个,所以我提前了)。 我想要通过这些应用实现的部分工作是学习新知识。 到目前为止,我的冒险经历是我使用Photos和HealthKit以及其他我以前不曾使用过的组件。 对于下一个应用程序,我决定看一下CloudKit。 跨设备同步总是给开发人员带来痛苦,尤其是当您不想创造糟糕的体验并且用户期望这些东西能够正常工作时。 我最新的应用程序非常简单。 尽管我和我的朋友都长大了,但我们仍然有愚蠢的一面。 有时候,我们可能会为年轻时的歌曲键入歌词,或者只是发送表情符号。 为此,我构建了“一堆便便”,这是一种创建单个字符或整个短语(如合唱)重复的简单方法。 第一个版本现已发布,但我已经开始着手进行下一个更新,即cloudkit集成。 我不确定它会多么复杂,但实际上非常简单。 通过开发门户网站创建容器后,创建记录很简单,就像创建对象和调用保存方法一样。 与典型的关系数据库不同,不需要预先定义“方案”。 当创建“ recordType”的对象时(从关系的角度来说,这可以是您想要称为“表”的任何对象)。 然后保存对象会自动创建架构。 您可以在Container仪表板中定义不同的索引,但是会为您创建一个唯一的ID。 让容器= CKContainer(标识符:AppConstants.containerIdentifier) 让db = container.privateCloudDatabase let record = CKRecord(recordType:“ MyRecordType”) record [“ text”] =“某些文本”作为CKRecordValue db.save(record,completeHandler:{记录,错误 如果让err =错误{ // print(err) } }) 您可以访问3种类型的容器来保存数据。 公共-公共容器正好在罐头上写着。 上市。 使用您的应用的任何人都可以访问任何记录。 苹果免费提供大量空间。 私有–私有容器对用户是私有的,并且使用他们自己的iCloud存储空间。 即使作为应用程序的开发人员,您也无法查看他人的私人记录,只能查看您自己的记录。 这是一件好事! 这表明苹果非常重视隐私。 共享–共享容器再次非常明显。 它们基本上是私有容器,用户可以在其中允许其联系人的特定子集查看和编辑相同的数据。 一个简单的例子可能是同一家庭成员之间共享的待办事项清单。 检索记录也非常容易。 基本上,您可以定义要检索的recordTypes并调用适当的方法。 实际上,它是如此简单,我不知道为什么我没有更早开始使用它。 我正在认真考虑重新访问一些较旧的应用程序并集成Cloudkit。 […]
如果您曾经对开发用于iOS的应用感兴趣,那么可以肯定,您可能偶然发现的第一件事就是它们曾经使用一种叫做Objective-C的语言制作。 而且,如果您对C或C ++不太熟悉,其语法可能会让人感到不知所措,甚至令人恐惧。 但是不要害怕! 苹果大约在四年前推出了一种名为Swift的新编程语言,现在它已成为开发所有iOS应用程序的官方支持的编程语言。 这并不意味着所有了解Objective-C的人都无法继续创建iOS应用,但是Swift引入了一些工具,可以使程序员的生活更轻松。 凭借其简洁的语法和严格但安全的键入,您可以确定Swift与Apple以前的语言相比具有许多巨大的优势。 对于使用Java或Java的人来说,他们可能会觉得它非常熟悉,因此学习曲线对您来说不应该那么陡! Swift于2014年6月在Apple全球开发者大会(WWDC)上以beta版首次发布,但直到同年9月才为Apple开发人员公开发布了Swift 1.0版本。 但是,自2016年9月起,版本3.0已发布,并且引入了一些有趣的更改。 可以肯定地说,苹果可能会每年或至少在每个主要的iOS版本中继续发布新版本。 尽管新功能总是令人兴奋,但不断发展的语言很容易破坏我们以前的代码。 Mac的官方IDE Xcode包括一个助手,可以帮助开发人员升级其代码。 但是,助手无法解决所有单个冲突,程序员最有可能需要进行手动更改。 根据Swift的项目网站,该语言具有三个主要功能: 安全性 :由于编程语言是强类型化的,因此除非有意忽略编译器的警告,否则几乎不可能出现有关数据类型和错误转换的运行时错误。 此外,空指针的使用受到限制,可以使用称为“可选”的特殊数据类型来使用。 也强烈建议使用常量而不是变量。 速度 :Swift承诺与其替代的语言(Objective-C)及其表亲C和C ++一样快,因此您可以期望该语言具有恒定的速度,而不会出现“短暂爆发”的情况。 富有表现力 :它的语法是现代的,并且受益于代码样式的一些最新趋势,从而使程序员可以大大减少他们键入的代码量。 这意味着随着语言的不断发展,它也可能会遭受变化。 出乎意料的是,苹果公司在2015年12月宣布,根据Apache Commons许可(当时的版本为2.2),Swift将作为开源项目重新发布,以及其核心库和其他工具,例如编译器和调试器。 从那时起,开发人员开始采用该编程语言,并正在构建多个库甚至Web支持。 Mac OS本机支持该语言,目前还支持Linux。 尽管Windows暂未在任何地方提及,但程序员可以使用联机编译器进行尝试,但没有任何东西说永远不会支持Microsoft的操作系统。 时间会证明一切。 尽管Swift主要用于开发应用程序,但它不仅仅局限于创建iOS和Mac OS应用程序,因为它被认为是一种多用途的编程语言。 因此,仅凭Swift便无法为Apple的小工具开发应用程序。 那就是两个库发挥作用的地方。 这些称为Cocoa和Cocoa Touch的框架具有相同的用途,分别为iOS和Mac OS X操作系统创建应用程序。 根据Apple的文档,Cocoa是一个术语,用于引用用Objective-C运行时构建的任何类或对象,并且是从NSObject类继承的。 因此,它们包含具有类的特定库,这些类将帮助开发人员创建用户界面并与每个小工具的硬件和软件的各个组件进行交互。 这些库中有一个名为Foundation的多用途库,其中包含一组标准工具,用于国际化的原始数据类型和实用程序,对象持久性,文件管理,XML处理,网络连接等的实现。 此时,您可能想知道“如果这些框架是用Objective-C编写的,那么Swift如何使用它们”? 确实,这些库不是用Swift编写的,但这不会阻止语言使用它们。 如何实现这一点将在本文中进一步解释。 最初,此文章是作为针对试图学习新语言的Java开发人员的网络研讨会的一部分而创建的。 这就是为什么我专注于语言的某些语法特性,这些特性在Java中是不同的,但它们可能仍然非常相似,而在本出版物最初发行之时,Java中还没有包含一些新特性。 变量和常量 与任何编程语言一样,您需要在某个点存储值才能进行计算。 在Swift中,您可以使用var关键字声明变量,并使用let声明常量。 关键词。 变数= […]
预习 资源 项目 https://github.com/calmone/iOS-UIKit-component 参考 UIAlertController https://developer.apple.com/reference/uikit/uialertcontroller UIAlertAction https://developer.apple.com/reference/uikit/uialertaction UITextInputTraits协议 https://developer.apple.com/reference/uikit/uitextinputtraits 快乐编码😄
从iOS开发者(2015年)起,到12个月为止。 Encontrei um grupo no telegram de uma galera muito boa que trabalha com“ freelas” pelo mundo afora。 收受“自由人”的部分参加权,并获得法律许可。 迪迪·恩克拉(Decidi encarar)。 客户的经验丰富,经验丰富的客户,法务人员和法人客户的徽标徽标不合时宜旨在使工程技术进步的经验。 用于汽车,摩托车等的应用程序时代。 pessoal,espero ter sido claro com minhasexplicações。 简短介绍。