Tag: Objective C

iOS:使用IBInspectable

顾名思义,本教程将指导您如何直接通过IBInspectable(InterfaceBuilderInspectable)从Interface Builder设置控件上的自定义值,我们可以创建可以在Interface Builder中检查的属性。 让我们以按钮为例,假设我们必须在按钮上设置拐角半径或边框宽度或颜色。 创建UIButton的子类,并使用IBInspectable添加以下属性,并实现其setter和getter 现在选择“属性”检查器。 您将看到自定义属性出现。 您可以设置所需的值而无需编写任何代码。

@objcMembers让我傻了

假设您有一个要在Obj-c中使用的Swift类。 通常,您只需使用@objc属性标记该类及其属性。 但是,如果您的类具有很多方法和属性,而不是使用@objc标记每个方法和属性,则可能更聪明的方法是使用@objcMembers属性,该属性将标记对您而言在Obj-c中可见的所有内容。 现在,这是有趣的部分。 根据苹果 将@objcMembers属性应用于类会隐式地将@objc属性添加到其所有与Objective-C兼容的成员。 这样一来,您将认为对于我的示例类来说,两种方法是平等的。 好吧,他们不是。 实际上,这些是: 为什么对我来说意味着什么? 假设您已经使用@objc作为NSObject的子类声明了该类。 该类是Swift框架的一部分,在其他一些Obj-c项目中用作依赖项。 出于某种原因,例如在重构期间,您决定从NSObject中删除继承。 这个故事如何结束? 或多或少像这样: 可是等等! 通过使用@objcMember,您很聪明,因此您得到了…… 没错 没有警告。 没有。 就这样

内容模式| 迅速

Entenda os modos como oconteúdopode ser tratado pela视图。 存在三种内容模式,即:scaleToFill,scaleAspectFit,scaleAspectFill。 致辞,致辞,致谢。 原理上的区别是,视图的比例是正确的。 .scaleToFill(escalar para preencher) Esseéo modopadrão,ele escala oconteúdopara preencher toda的景色,messque que issofaçaconteúdoperderaproporção。 如果需要,可以通过更改内容的纵横比来缩放内容以适合其自身大小的选项。 .scaleAspectFit(escalarproporçãopara ajustar) 可以按比例进行管理,可以从视图中进行预览,可以从视图中进行任何操作。 通过保持纵横比来缩放内容以适合视图大小的选项。 视图边界的所有剩余区域都是透明的。 .scaleAspectFill(escalarproporçãopara preencher) 前面的视图,视图的顶部,视图的顶部,视图的顶部,视图的顶部和底部,视图的顶部和底部。 缩放内容以填充视图大小的选项。 内容的某些部分可能会被裁剪以填充视图的边界。 Outros Modos: 您可以在原始视图中进行操作,也可以在视图中保留视图。

每个iOS开发人员都应使用的10个开发工具

这是我在Medium上的第一篇博客文章,我想将其专门用于开发工具,这些工具可以节省很多宝贵的时间,从而使我们(至少是我的)生活更加轻松。 对我来说,在项目上工作时最重要的是要提高生产力,并且要实现这一点,我必须找到并使用能够帮助我花更多时间并专注于实际应用功能及其复杂性的工具。 直截了当,这里是我每天使用的工具: JSON Accelerator –一种在Objective C中处理JSON数据的更好方法。当处理JSON并创建各自的模型时,这变得很痛苦。 JSON Accelerator将遵循SOLID原则自动创建模型。 就我个人而言,这是我无法缺少的工具。 它会在不到一秒钟的时间内为所提供的JSON数据生成所需的文件,而不会花费数小时手动创建它们。 不幸的是,它仅支持Objective-C,因此对于Swift,我正在使用SwiftyJSONAccelerator来完成相同的工作。 Prepo –准备,共享和预览App图稿和图标。 拖放图稿以将@ 3x和@ 2x快速转换为@ 1x,并在上下文中预览Icon图稿。 Prepo将所有图稿存储到项目窗口中,以准备批量导出,或将QuickDrop用于@ 3x和@ 2x的超快速大小调整。 您是否曾经从设计师/客户那里收到过一种尺寸不正确且命名错误的资产? 好吧,它经常发生,它们会让您处理其余的事情……该工具可以帮助您解决这种情况,因为它将所有资产转换为所需的大小,并为您正确命名。 它还可以将您的应用程序图标转换为所有所需的大小。 CocoaControls –是一个了不起的网站,您可以在其中找到超过5000个Swift和Objective-C开源GitHub库。 因此,下一次,而不是四处寻找应用程序所需的一些UI组件,只需访问该站点,您将找到所需的一切。 Postman –是一款用于与HTTP API进行交互的Google Chrome应用。 它为您提供了一个友好的GUI,用于构造请求和读取响应。 我的实践是在项目中实现API之前先构建和测试它们。 它拥有超过300万用户。 CocoaPods –是Swift和Objective-C Cocoa项目的依赖项管理器。 它拥有超过32,000个库,并在超过210万个应用程序中使用。 CocoaPods可以帮助您优雅地扩展项目。 我必须在我从事的每个项目中都包含的另一种工具…除了在整个项目中保留外部库并在添加它们之后遇到各种问题之外,您还可以使用CocoaPods以一种优雅的方式解决所有问题,并将所有内容都保存在一个地方一些终端命令行。 JSON Formatter –您是否曾经收到没有格式的JSON响应,而您几乎无法理解其结构? 这就是为什么我开始使用此Google Chrome扩展程序的原因,并且浏览器中的JSON响应不再出现视觉问题。 我建议您也这样做,并且保证您会喜欢自动格式化的回复。 Sympli –与Photoshop,Sketch,Android Studio和Xcode合作的团队的设计移交和实施。 我必须说,对于一个可加快您的UI实施速度的插件而言,这是一个非常有趣的概念。 这就是它的工作原理……创建一个项目,然后设计师从Web版本添加他的文件,然后转到Xcode项目并安装插件,只需按一下按钮,它将在UIViewController和还为组件创建所需的插座。 这个插件没有太多经验,但是我鼓励您尝试一下并分享您的印象。 我还将分享一些未在开发中直接使用的工具,但它们也是重要的一部分: SearchMan –如果您在AppStore上拥有自己的应用程序,并且想跟踪您的关键字排名和应用程序的可见性,则可以使用此免费的ASO工具,该工具将为您提供有关应用程序位置的见解。 […]

了解Objective-C现代化

对于iOS开发人员而言,Objective-C现代化确实非常重要。 它提供了更好的类型安全性,并改善了与Swift代码库的交互。 现有代码库的这种现代化包括但不限于: 可空性注释 用NS_SWIFT_NAME快速重命名 带有NS_SWIFT_UNAVAILABLE限制API 用NS_TYPED_EXTENSIBLE_ENUM / NS_TYPED_ENUM相关的ObjC常量进行分组 这是所有文章的清单 第1部分:可空性注释 第2部分:泛型(下一个版本) 第三部分

如何将完整的ObjectiveC应用程序转换为Swift

我们花了三天的时间,一直下降到两位数。 现在,无需再理会的错误了。 我们必须使用助手视图来并排修复剩余的错误。 大多数错误被证明是对类vars的可选类型的错误猜测。 Converter始终选择隐式展开的变量,而不是可选变量。 否则它将尝试猜测局部变量类型错误。 (您不需要在大多数时候声明变量类型,因为Swift可以推断出它们)。 只是因为我渴望看到该应用程序已构建,所以我选择了一条捷径。 我使用强制展开和强制强制转换只是为了消除构建错误。 我几乎不知道,以后我将为此付出高昂的代价。 一堆var允许转换后(转换器将所有变量都定义为var),我们有了一个内置的应用! 别这么大肆宣传,我们才刚刚开始。 是的,我们的应用正在构建中,但是没有返回任何数据并且在启动时崩溃。 我们花了接下来的100个小时进行调试,以查找所有 空错误 if not null检查,则错误, 以及许多可选性修复。 之后,我们的应用程序正在初始化。 那是“差不多”的铸造,还有另一个力解开错误。 有样式指南的原因。 它们可以帮助您按照设计使用的语言来使用该语言,并且可以在创建大多数错误之前将它们阻止。 当时,SwiftLint进行了营救。 您可以在Xcode上运行SwiftLint来查看所有样式指南异常,并快速对其进行修复。 我决心摆脱所有可选性错误,并尽可能与风格指南保持联系。 我甚至启用了加入规则。 修复样式不仅有助于提高可读性,而且还提高了我们对错误的信心。 我们在途中发现了其他错误。 我们摆脱了所有强制展开,强制转换,显式类型声明以及隐式展开的可选内容。 我们尽可能地if let和guard let语句成为可能。

使用CocoaPods

“ CocoaPods是Swift和Objective-C Cocoa项目的依赖项管理器。 它拥有超过4.8万个库,并在超过300万个应用程序中使用。 CocoaPods可以帮助您优雅地扩展项目。” 您可以在这里阅读更多信息,请参考:https://cocoapods.org/ 让我们看看如何为您的项目创建podfile。 如果您的计算机上未安装CocoaPods,则可以使用 “ gem install cocoapods”命令。 打开终端,然后转到您的项目文件夹。 2.运行命令“ pod init”,它将为您的项目创建一个Podfile,您可以在其中使用CocoaPods用于库,项目中需要的框架。 3.现在,您可以使用Xcode或其他编辑器或使用终端根据需要编辑Podfile。 运行“ vim Podfile”以使用终端进行编辑。 按“ i”进行编辑,修改后按“ esc +:+ w + q”保存并退出编辑。 4.例如,让我们在项目中添加AFNetworking CocoaPod。 参考:https://cocoapods.org/pods/AFNetworking 您始终可以在CocoaPods网站https://cocoapods.org/上搜索所需框架和库的最新CocoaPods。 5.然后运行命令“ pod install”以使库适用于您的项目。 6.现在Xcode已经创建了“ .xcworkspace”,供您进一步使用。 打开项目的“ .xcworkspace”,并进行愉快的编码!!!

Objective-C与Swift:您应该从什么开始?

一方面,Swift从一开始就告诉我们,他非常容易理解,另一方面,Objective-C具有自己的高输入阈值,对于初级程序员而言有时可能很难做到。 如果您对制作自己的应用程序的兴趣太大了,那么您会遇到一个问题-应该使用哪种编程语言:新的Swift或经过时间考验的Objective-C? Objective-C与Swift:让我们看看吗? 让我们看一下使用不同语言的相同代码的一些原始示例: 如果要初始化大量,则在Objective-C中您应该这样做: 在Swift中: 当然,即使在原始代码中,您也会看到比Objective-C更快,更易理解的语言。 让我们看看如果我们要制作像“ Hello World”这样的程序会怎么样 目标C: 迅速: Objective-C具有自己的特定且困难的语法,并带有大量不同的标记。 Swift更清晰,而且类型具有防御性,因为如果您忘记打印变量类型,则不必担心。 但是,如果您是初学者,则应该知道在何处使用哪种类型。 Objective-C与Swift:为什么我需要这个? 重要的是,您打算做什么以及需要什么? 让我们来看看每种语言的优缺点! 工作方式: 几年前,当Swift发行时,您不知道Objective-C就找不到工作,因为所有公司都在Objective-C上对其应用程序进行编程,因此很难将Swift实施到Objective-C中。 今天,一切都变了。 所有公司都知道Swift是一种快速发展的语言,并开始在其应用程序中使用它。 另一个非常重要的时刻是稳定性。 Objective-C已经使用30年了,而不是只有4岁的Swift。 当然,例如,您不能在新程序中使用Swift的早期版本,因为它相差太多,这在Objective-C上无法说清楚。 您可以使用已有5年历史的代码,它将可以正常工作。 为了娱乐: 如果您不想在公司工作,并且计划快速而轻松地制作自己的应用程序,那么您需要Swift。 Swift中的代码简洁明了,这降低了初学者的入门门槛。 但是不要放松。 由于进入门槛低,Internet充满了不合格代码。 因为许多人在没有必要的知识的情况下开始进行编码。 好吧,如果我们总结一下-Swift适用于最新的应用程序以及快速轻松的入门。 Objective-C是旧平台的工作和支持所必需的,但是很难研究它,但是该选择什么呢? 这个问题没有确定的答案,但是我试图让您考虑您的优先事项,这应该有助于确定。 一些材料来自:https://goo.gl/nJ5hnG

执行任务所需的循环语句需要重复特定的次数。

循环(For,ForEach,While,do…while) 执行任务所需的循环语句需要重复特定的次数。 假设,如果您要打印从1到10的数字,可以不执行循环操作,如下所示。 NSLog(@“ 1”); NSLog(@“ 2”); NSLog(@“ 3”); NSLog(@“ 4”); NSLog(@“ 5”); NSLog(@“ 6”); NSLog(@“ 7”); NSLog(@“ 8”); NSLog(@“ 9”); NSLog(@“ 10”); 在这里,您要编写10次NSLog语句以打印从1到10的数字。这里可能出现循环,因此您可以执行重复的任务而无需多次编写相同的代码。 为循环 For循环的语法 for(初始化器;条件表达式;循环表达式) { //要执行的语句 } 使用For循环打印1到10之间的数字 对于(int i = 1; i <= 10; i ++) { NSLog(@”%d”,i); } 输出 : 第一次i = 1,因此它将打印1并将i值增加+1 第二次i = 2,因此它将打印2并将i值增加+1。 当i值达到10时,它将打印10并将i的值增加1,因此i为11,11 <= 10将不被满足,循环将中断。 让我们看看如何使用FOR […]

React Native —在本机Swift视图上调用类方法

与React Native的工作非常像我认为结束粗俗婚姻的样子。 首先,这是所有的激情: “只有几个Javascript文件,我有一个iOS和一个Android应用程序? 我一生都在哪里?” 随着时间的流逝,困难逐渐消失,您的应用变得越来越复杂 “但是我现在准备拥有多个有效的发行版! 我们可以等多久?” 或事情莫名其妙地停止工作。 “我更新为0.50.1,现在突然无法解析模块`AccessibilityInfo`? 你变了,我几乎不认识你了……” 当您开始在应用程序中实现本机模块和UI组件时,真正的挫败感就会来临。 尚无针对所有内容的JS React Native解决方案,有时您不得不烦恼底层的Android Studio和XCode项目。 令人愤慨的是,文档中对此功能的解释还不够。 当我不得不在应用程序中实现本机视频播放器时遇到麻烦。 经过一番努力后,我得以展示它,但我似乎还不太清楚如何在此本机组件上调用方法。 经过数小时的眼泪和啤酒,我终于弄明白了,并想与世界分享,这样您就不必经历我的痛苦。 我还没有准备好与React Native离婚。 让我们为孩子们(组件)聚在一起。 步骤1:创建一个新项目 本教程假定您熟悉创建和与React Native项目进行交互。 该项目的最终版本可以在GitHub上找到。 react-native init MediumSwiftNativeExample cd MediumSwiftNativeExample 反应本机运行iOS 此时,您应该在iOS模拟器中看到默认的React Native屏幕。 步骤2:喝啤酒(您将需要啤酒) 步骤3:修改App.js 接下来,打开您的App.js文件,并将其替换为以下内容: 从’react’导入React,{组件}; 导入ReactNative,{ 平台, StyleSheet, 文本, 视图, requireNativeComponent, TouchableOpacity, UIManager }来自“ react-native”; 导出默认类App扩展Component { render(){ 返回( <this.mySwiftComponent myText […]