Tag: iOS应用

Swift协议:属性区别(获取,获取设置)🏃🏻‍♀️🏃🏻

面向协议的程序设计是iOS中的新趋势,尽管它是迅速引入的,但它已经有几年历史了。 Swift是一种新时代的语言,并且在每次迭代中都变得越来越强大。 在2015年的WWDC中,我们都遇到了Dave Abrahams的Crusty,他解释了POP的重要方面。 我真的建议您仔细阅读一次,以更好地了解POP。 Swift中面向协议的编程– WWDC 2015 –视频– Apple Developer Swift的设计核心是两个令人难以置信的强大创意:面向协议的编程和一流的价值…… developer.apple.com 我还建议阅读Raywenderlich的教程Niv Yahel撰写的POP简介,它也可以在操场上进行讲解和实际操作。 协议定义了适合特定任务或功能的方法,属性和其他要求的蓝图。 然后,该协议可以由类,结构或枚举采用,以提供这些要求的实际实现。 满足协议要求的任何类型都被称为符合该协议。 苹果文件。 协议SomeProtocol { var mustBeSettable:Int {获取设置} var didNotNeedToBeSettable:Int {get} } 协议声明一致性类型必须通过在声明主体中包含协议属性声明来实现属性。 它具有变量声明的特殊形式: Var propertyName:类型{获取设置} 与其他协议成员声明一样,这些属性声明仅声明符合协议的类型的getter和setter要求。 因此,您不能直接在声明它的协议中实现getter或setter。 可以通过多种方式通过符合类型来满足吸气剂和设置剂的要求。 如果属性声明同时包含get和set关键字,则符合条件的类型可以使用存储的变量属性或既可读又可写的计算属性(即,同时实现getter和setter的)来实现它。 但是,该属性声明不能实现为常量属性或只读的计算属性。 如果属性声明仅包含get关键字,则可以将其实现为任何类型的属性。 有关实现协议的属性要求的符合类型的示例,请参见属性要求。 对于Gettable Protocol Properties ,可以通过任何种类的属性来满足要求,并且对于可用于您自己的代码的属性,也可以设置该属性是有效的。 对于“可获取和可设置的协议属性” ,不能通过始终存储的属性或只读的计算属性来满足要求。 协议中的属性要求始终被声明为变量属性,因为它们被声明为计算属性。 Gettable —常量属性 协议FullyNamed { var fullName:String {get} } struct […]

在IOS中进行调试

大家好,我所有的IOS开发人员! 我们所有人都使用调试来发现错误以纠正它们,或者知道在我们编写的代码的底层发生了什么。 当我学习Objective-C时,对于IOS开发,我的一个朋友说,如果您成为一个优秀而高效的调试器,您将成为一个出色的程序员。 当我开始第一份工作后,很快我意识到了调试的重要性。 有时,我们需要在公司中调试其他人的代码,以了解他们的代码的逻辑和内幕。 从Apple Documents: 调试工作流程分为五个部分: 发现。 找出问题。 定位。 确定在代码中出现问题的位置。 检查。 检查正在运行的代码的控制流和数据结构以查找问题的原因。 固定。 将您的见解应用于问题原因以设计解决方案,并编辑适合的代码。 确认。 编辑后,运行该应用程序并使用调试器进行检查,以确保修复成功。 ->看下面的图片,熟悉调试工具,在Xcode上可以找到它们。 断点:我们使用它们来暂停应用程序,同时运行检查变量或了解我们编写的代码如何执行。 在断点调试中,我们主要使用“调试/运行”,“跳过”,“进入”和“退出”按钮,它们位于“调试”栏上。 >移入按钮有助于移入当前正在执行的方法。 >跳出按钮可以帮助跳过当前方法并移至源代码管理中的下一行。 -> Step-Over将执行当前代码行,如果该行中有任何func / method,它也会执行该代码并移至代码的下一行。 ->使用断点运行时,我们可以在Xcode的源代码文件上的任意位置单击鼠标右键,然后,如果选择“ continue to here ”,执行流程将在您单击的地方停止。 这样,您可以避免许多断点并更快地分析代码。 2.在Debug Navigator中,它形成一个调用堆栈,该堆栈将执行过程中的每个方法添加到断点命中为止,然后我们可以从正在执行的当前方法上进行任何级别的检查,以检查上一个步骤中发生了什么。代码行/方法。 它仍然显示与先前方法中使用的变量相同的值,这有助于通过发现问题进行调试。 3.如果我们要检查任何UIComponent的错误,可以使用Debug-hierarchy按钮,该按钮以3D视觉形式向您显示所有IBdesigned子视图,以检查视图的参数,视图层次结构等。 在调试中,我们通常通过-> 发现错误2.找到错误3.检查代码4.修复错误并5.确认过程。 Xcode中有许多类型的调试断点。 要查看列表,请通过单击左侧面板中的调试导航器来选择调试导航区域。 然后按一下底部左侧的+图标,以查看可用的断点类型。 异常断点: ->>在我们的开发中很多时候,我们都会在红色突出显示的行中看到“ Thread1:signal SIGABURT… ”之类的错误。 这可能会导致我们的代码出现异常。 例如,使用已存在的索引路径在表视图中插入新行。 对于这类异常,我们可以使用异常断点,该断点在发生异常的行中暂停执行。 一件很棒的事情是,通过与Xcode用户一起保存,我们可以在所有项目中使用这些异常的断点。 这样,在我们所有的项目中,只要发生异常,断点就会暂停执行。 您可以在Xcode中启用或禁用该断点。 我们要做的就是将异常断点移动到Xcode中的用户帐户。 >我们可以通过在断点导航区域中右键单击断点,然后选择共享来共享断点。 […]

iOS Trivia问题

有关应用程序,应用程序代理,窗口和RootViewController的21个简单问题。 FinishLaunchingWithOptions哪个类调用? UIApplicationMain 哪个类具有window属性? 应用程序委托 哪个类具有rootViewController属性? UIWindow 该应用的委托属性属于哪一类? UIApplication 哪个类实例化UIWindow? UIApplicationMain 哪个类实例化了rootView控制器? UIApplicationMain类 什么@标记可使应用程序知道该类是应用程序委托? @UIApplicationMain 您可以在项目中看到UIApplicationMain吗? 是,关于目标C,否是Swift 什么时候可以看到您的应用界面? 必须对窗口实例进行什么方法调用? MakeKeyandVisible 应用程序如何知道主故事板的名称? 在info.plist文件中。 如何在不使用主故事板的情况下创建应用? 在didFinishLaunchingWith选项中: 实例化一个UIWindow 将其分配给appdelegate.window 实例化视图控制器 分配给window.rootViewController 在窗口上调用makeKeyAndVisible 瞧 (请注意,这在如今并不常见) 视图实例化哪个类? UIView 哪个类可以让视图响应触摸和滑动? UIResponder 对或错,所有视图和图层都是UIResponders 假。 只有视图是UIResponders 是非题,一个应用程序始终只有一个UIWindow 假。 如果您的应用程序还使用一个外部屏幕,则它可以具有多个UIWindow 一种常见的情况是,如果用户已登录,则跳过登录屏幕。您将如何做? 检查UserDefaults的登录状态。 如果用户尚未登录,请继续执行该应用。 如果用户已登录,请在登录后实例化下一个视图控制器,并将其分配给window.rootviewcontroller。 是否可以继承UIWindow并使用它? 是的,只需将myWindow()分配给应用程序委托中的window属性。 如果您在不是根视图控制器的ViewController中,那么如何获得对窗口的引用? 在每个视图中。 引用“ self.view.window” 如果视图的window属性为nil,对用户有什么影响? 该窗口对用户不可见 您可以从应用程序委托实例获取对窗口的引用吗? 是的,您可以得到: […]

在iOS Swift中预取UITableView

UITableViewDataSourcePrefetching :iOS 10中的一种协议UITableView,可以异步加载异步数据源。 用户不希望滚动到chhmhoặcđừ滚动s并加载nhữngindexPathtiếptheosắpđượchiệnlên,请确保平滑滚动cho tableviewhoặccollectionview。 Cácbướcthựchiện: TableviewVà数据源 符合协议 tableView 。 prefetchDataSource = 自我 可以通过通讯协议tableView(_:prefetchRowsAt:)加载数据,并可以缓存。 显示数据UI UI tableView(_:cellForRowAt:) 取消加载获取异步任务: tableView(_:cancelPrefetchingForRowsAt:) 生活圈: Khi lnnđầhi hinn单元格,tindex索引路径= 0,hàmprefetchRowsAt索引10索引ti p theotínhtừ索引cuốiđhiệntrênmànhình(内容偏移量)。 Khi用户滚动chậmxuống,hàmprefetchRowsAtsẽtrảvề1索引tiếptheo,tứclà索引thứ11(10 +1)。 Khi用户滚动滚动索引,滚动索引10索引索引滚动索引(内容偏移量)。 Khi用户滚动chậmsauđóđộtngộtđổihướng滚动,hàmprefetchRowsAtsẽtrảvề10 index theohướngđãđổi,đồngthờisẽvàohàmcancelPrefetchingForRowsAttrảvềindexàvđindexà thị。 代码: -Thựchiệnkhaibáo代表 myTable.prefetchDataSource =自我 -实施代表 func tableView(_ tableView:UITableView, prefetchRowsAt indexPaths:[IndexPath]){print(“ Fetching:\(indexPaths)”)//异步加载:数据,图像… func tableView(_ tableView:UITableView, cancelPrefetchingForRowsAt indexPaths:[IndexPath]){print(“ Fetching Cancel:\(indexPaths)”)//取消隐藏các操作异步加载数据 } 您可以跟随đểnhậnnhữngbàiviếtmớinhấtcủamìnhnhé。

如何绝对杀死冒名顶替综合症

为什么学习编码如此令人沮丧? 实际上,当您已经知道“如何编码”时,为什么仍然令人沮丧? 最重要的是,为什么如此多的人能够很好地编写代码(被称为冒名顶替综合症),却会感到欺诈? 我想给出我的答案,并希望在您的编码生涯中为您提供帮助。 首先,我是谁? 好吧,我是一名iOS开发人员,而且我喜欢编码,但是我一生也做过很多教学; 无论老少,我都可以肯定地说,困扰着许多学习密集型职业的正是这些问题,而这个问题实际上就是学习。 和我在一起,我保证即使您不是程序员,您也会发现这确实有用。 我们已经将学习风格,学习理论,学习的秘密变得更加复杂,更快,更好,更久……(后现代主义者甚至会问:“什么在学习?”)。 通过做。 您可以观看不计其数的教程,阅读一百万行代码,而不是该死的东西。 在撰写更多文章之前,这是我争论的重点: 作为开发人员,有很多东西要学习。 吨的框架,语言,模式等。然而,在任何职业中(尤其是我来自的音乐领域)都需要学习很多。 为什么为什么对编程如此沮丧? 我一生中从未遇到过冒名顶替综合症的音乐家。 我相信答案是我们将永远学习,但真正的学习却很少。 当您学习一种新语言时,您一定要“用它来运行”。 如果您在编写任何代码之前考虑到语言的方方面面,那么您将一事无成。 当您攻击新的框架,库和其他人的代码时,您可能会边走边学。 语言将不可避免地演变为x版本,框架将发生变化和适应,您仍然只知道该框架的50%,但您已经足够了解。 听起来有点熟? 辛苦了 当我做音乐时,当我能真正被蒙住眼睛弹奏时,我就“知道”它。 我听了数百遍,练习了每一个音符,每个间隙,每个旋律都隐藏在乐曲的深处,直到我几乎可以分别演唱每个部分。 熟悉一些我需要在日常生活中使用的零件和工具,但是有些事情我绝对需要知道。 我知道那是什么,并确保我了解它们。 那我的意思是什么? 如果您不了解某些内容,只需在Google上搜索对不对? 好吧,如果您必须搜索它,那么是的,显然您不知道它。 好的,可以! 实际上,您需要熟悉数百万种内容才能知道如何解决问题。 Google令人称奇,它彻底改变了我们获取信息的方式。 但是Google不会为您的信心做任何事情,冒名顶替综合症肯定在那个角落等待着。 但是,如果您意识到: “我需要熟悉并能够找到这些事情的解决方案,但我要确保我真的了解 这件事的所有内容。” 然后,您意识到一些完全解放的东西: “我实际上不需要了解这些东西。 我不需要是人类的海绵或天才。 我可以随意找到这些信息。 但是我确实知道这些东西,真的很好! 那么,您何时真正从“学习”到“学习”呢? 答案很简单:何时可以随意回忆。 可能是CoreData并可以自由使用它,也可能是C#中的肖邦的Nocturne。 没关系 逐条记录,逐字母回忆。 等等,我对核心数据一无所知(在此处插入所需的内容)。 有些地方我听不懂或记得。 TADA! 您刚刚意识到自己在某些已知事物上存在弱点。 这种弱点需要治愈。 实践。 音乐练习专门针对那些非常弱小的方面,可以说,每种练习都应该是相同的。 这也被称为“故意练习”,您将在非常小的和超特定的事物上进行工作,并专注于它,专注于它,直到您像Lazerbeam杀死独角兽一样粉碎它为止! […]

包装器,用于处理iOS中的字体

大家好,希望你做得很好! 在本教程中,我将引导您完成如何制作包装对象以处理iOS中所有自定义字体的方法。 开始吧… 字型: 字体可以为您的文本增加价值。 它可以帮助读者感知文字信息。 颜色 , 字体和文本大小的正确选择对于吸引目标受众至关重要。 使用印刷版吸引读者很容易,但要吸引他们的注意力需要更多的创造力。 TTF和OTF是扩展名,用于指示文件是字体,可用于格式化文档以进行打印。 TTF代表相对较旧的字体TrueType字体,而OTF代表OpenType Font ,它部分基于TrueType标准。 两者之间的重大区别在于它们的功能。 TTF仅取决于字形表,该字形表定义了每个字符的外观,而OTF能够与CCF(紧凑字体格式)表一起使用字形。 如何在iOS中添加自定义字体: 首先从Web或UIDesigner获取所需的字体文件(TTF或OTF) 将它们移动到您的项目文件夹中(如果需要,请确保复制并选择了目标)。 通过从导航窗格中选择项目根文件夹,然后从目标中选择“构建阶段”,仔细检查字体是否包含在资源包中。 然后展开“ Copy Bundle Resources”行,以查看那里的字体文件。 如果不存在,请在导航器窗格中选择文件,然后将其手动添加到目标中。 打开Info.plist,然后右键单击并选择“添加行”。 开始输入并选择“应用程序提供的字体”。 展开该行,然后在“值”字段中的“项目0”旁边输入字体的名称(包括其类型,例如,参见下图)。 →现在您知道了字体的价值,以及如何向iOS项目添加自定义字体。 现在,让我们编写一个包装对象来处理项目中的字体。 在开发阶段,字体大小或其样式随时可能取决于UI外观。 因此,通过使用该包装器,我们可以轻松处理这些更改,而无需花费大量时间和精力。 让我们编码: →首先,我们创建一个结构以封装所有需要访问的类型,以创建和返回字体 。 我们将枚举用于类型,因为它们在用例中非常方便。 它们也是值类型,因此也不必担心保留周期。 首先创建一个struct对象,定义一个枚举类型以选择或传递所需的Font名称。 此类型根据选择的情况返回一个值,该值是计算属性。 在本教程中,我使用“ SFProDisplay ”和“ SFProText ” 字体 (自定义),并且还提供了一个自定义大小写来访问预定义的系统(自定义)字体。 上面的Font对象不覆盖系统字体。 除系统字体外,您可以使用所有其余字体。 您可以根据需要使用系统API来构造系统字体类型。 如果要覆盖所有类型,请将它们包括在FontType 枚举中 。 如果您想了解有关在iOS中处理字体的更多信息,请检查以下我提供的资源。 目前为止就这样了。 祝您编程愉快,如果您遇到任何更好的资源或方法,请与我分享。 […]

历史上最简单,最奇怪的CoreData简介

CoreData! 是! 没有! 等等…什么? 来自很多地方的很多意见。 什至是什么? iOS中的一些“数据库”东西,可以让您的应用存储东西,对吗? 但是,请等待,不要更改数据模型,否则必须进行迁移。 ?? 让我清楚一点:如果您没有从正确的地方学习,CoreData可能会使在线学习感到困惑。 这篇文章将像您从未见过的那样介绍CoreData:它是如此简单,以至于我的非编程性(但还真是太棒了)的妻子理解了它。 每当您开始使用CoreData时,都需要习惯一些术语和想法。 停。 请允许我为您提供更多乐趣,让它看起来不那么奇怪。 假设您是老板(是的!),您有几个员工。 这是特别忙碌的一天,但是突然有人突然冲进您的办公室,完全没有考虑到您只是在听泰勒·斯威夫特(Taylor Swift)的声音而现在却疯狂地试图隐藏它。 “达娜·斯库利(Dana Skully)刚把咖啡倒在我的全新Mac上!”,她在你的脸上吼叫着,以至于你实际上可以品尝到二手咖啡。 冻结。 眼前的不公正情绪激起了你的情绪。 我的意思是,咖啡从这个女人的脸上滴下来。 那个美丽的苹果电脑全都被破坏和浸泡。 你呢 a)当场射击达娜(最令人高兴) c)思考(大多数甘道夫) 令人震惊的事实是你还不能决定。 您需要一些上下文。 如果您要成为一名好经理,并且我们知道您想成为一名好经理 (您解雇了她,不是吗?),那么您需要了解有关情况的具体情况。 您需要有人回忆起发生了什么情况,以及在什么情况下是一名好经理的描述 (如果您解雇了她,只需责怪侠盗猎车手给您冲动的愤怒,所有的孩子都会这么做)。 我要去哪里? CoreData的工作原理与普通数据库略有不同,并且是一个很好的方法,但是考虑它的最佳方法是使用您创建的某种数据模型(足够简单,也许是新关系的颜色)。 但是,它将这些“联系”存储在上下文中,即托管上下文中 。 我对这种情况的看法是,其中的所有内容都有描述 ,例如涉及Dana Skully的不幸事件,我们稍后会再讲。 实际上,我们数据模型中的这些联系实际上是在您的应用程序中带有描述的,因此所有内容都可以正确存储。 最后一件事是,我忘了提到您是一家销售新Mac的商店的经理,所以每个人都还不错(您后悔解雇Dana)。 CoreData中的所有操作都是通过store完成的,好在这里存储您创建的内容。 应用程序关闭后,他们正等着您,从数据模型中加载,传递到商店并传递到可使用的托管对象上下文中 ! 如果您不感到困惑,那么恭喜您,您现在已经了解到有关CoreData的有用信息。 实际上,这就是我设法记住它的方式。 我做了一个故事。 不要相信那些“仅仅记住”事情的人,总是最好使用一个荒谬的故事,这是所有最优秀的人做事的方式。 那么最后,我们的Dana Skully发生了什么? 好吧,您奇怪地意识到:“达娜(Dana)已经走了……10…年”(乔伊·特里比安尼(Joey Tribianni)对于未成年人的参考)。 幽灵般的。 至少CoreData不会像这样开坏玩笑。

为什么您应该在没有情节提要的情况下开始学习IOS。

前一段时间,当我开始学习IOS开发时,我总是使用情节提要来构建UI,就像任何初学者一样,这里有自动布局和约束之类的概念以及我无法掌握的其他内容,我起初很挣扎,但随后您就可以掌握它了。之后,我问了我的一个以IOS开发为生的朋友,他为我提供了一些有关编写更好代码的建议,以谋生为生。 他建议我不要使用情节提要,不要用代码编写所有内容。 从那里开始,我开始在网上搜索,结果证明这是IOS开发人员之间的一个大争议。 只是要记住,NIB和XIB是描述用户界面的文件,并且是使用Interface Builder构建的,它们已替换为情节提要,但仍可以在开发中使用。 即使许多开发人员坚持使用一种方法,您也可以将所有方法都应用到同一项目中。 我认为从代码开始可以使您更好地了解swift,并更好地了解IOS开发。 最重要的部分是何时使用这三个选项之一,构建简单而快速的内容对故事板有帮助,您甚至可以在其中制作一个快速原型来快速完成工作,如果您必须复杂的UI或更好地掌握您可以使用代码编写它。 永远记住一些事情 不管您使用什么,重要的是完成产品并为您的客户提供最佳的用户体验。

在表格视图单元格上创建流畅多彩的缩放过渡

动画很棒。 iOS用户喜欢使用具有沉浸感和流畅动画的出色应用程序。 这是我作为该平台上的iOS开发人员的第一篇文章,我想向您解释我对当前正在从事的项目的认识。 想象一下这样的对象列表,或者更好的是UITableView : 简单,清晰,并且对本教程来说最重要的是单色单元。 如果通过点击这些单元格之一来扩展它并转到具有相同颜色背景的另一个视图控制器,那将不是很好吗? 我真的是这样 在本教程中,您将实现它。 因此,让我们打开一个新的Xcode项目并开始编码 让我们从创建带有交替彩色单元格的UITableView开始,我将选择红色和蓝色。 在您的项目中打开ViewController.swift并添加此方法。 如您所见,我将代码放入ViewController.swift的私有函数中,并且由于设置了委托和数据源,因此编写了扩展程序来处理所需的方法。 我在viewDidLoad()中调用setupTableView ()。 这是您在运行项目时看到的: 这是UITableView的非常简单的实现。 但是我不喜欢那些颜色,那些分隔物和那些大的单元格。 我开始以这种方式删除分隔符: tableView.separatorStyle = .none 然后,我认为我们应该为单元格添加一个单独的类。 一切都会变得更加复杂。 转到“ 项目导航器”,“新文件”,“可可接触类” 。 输入“ ColorfulTableViewCell”并使其成为UITableViewCell的子类。 创建文件。 现在,您应该拥有以下内容: 我们希望我们的单元格像我在故事开始时所展示的那样。 我们需要卡片视图样式。 我在类中声明了一个var并创建了图形: 看一下setupGraphic()的前两行。 我需要一个清晰的背景,因为我想使用一个漂亮的卡片视图,并且我还需要一个.none selectionStyle,因为我不需要它。 确保您的ColorfulTableViewCell类是这样的,然后再次打开ViewController.swift进行一些小的更改。 在setupTableView()中,您必须为单元格注册另一个类。 不再是UITableViewCell.classForCoder(),而是新的UITableViewCell.classForCoder()。 tableView.register(ColorfulTableViewCell.classForCoder(),reuseIdentifier:“ ColorfulCell”) 像这样编辑numberOfRows和cellForRow : 现在,我们要使用自定义单元格类,我们将使用其中的五个。 现在您可以再次运行,您应该可以看到以下内容: 让我们添加一些很酷的颜色。 我建议您在coolors.co上找到这5个。 这是一个很棒的免费网站,可让您生成随机的颜色组合。 让我们获取RGB并将其添加到代码中。 现在,在ViewController.swift中,我们必须创建一个数组(我称其为“ coolColors”),以包装这些颜色并在cellForRow()中轻松使用它们。 一旦使用它们并运行,您应该会看到以下内容: 现在,我们有了丰富多彩的“ cardy”表视图💕。 […]

关于新Xcode 9的所有内容都很酷

Xcode的最新版本Xcode 9于今年发布,在开发人员社区中引起了极大的兴趣。 Xcode具有一些时髦的新功能,而旧的功能已被完善,Xcode提供了一些很棒的功能。 以下是它的一些最佳功能- 改进后的新编辑器 :Apple已在Swift中构建了整个Xcode。 它是基于结构的快速编辑器,可让您智能地突出显示和导航代码。 它还包括Markdown的强大支持。 重构:重构内置于编辑体验中,可在Swift,Objective-C,Interface Builder和许多其他文件类型中使用。 超快速搜索 :“查找”导航器返回即时结果。 调试: Xcode 9使您可以通过网络无线调试iOS和tvOS设备(它还将支持iOS 11设备)。 源代码控制: Xcode集成了对GitHub帐户的支持,可快速浏览存储库并将您的存储库推送到云中。 核心ML: Xcode 9带有内置的核心ML编辑器,可让您将一些很棒的机器学习模型集成到您的应用程序中。 这些只是使构建应用程序更加快速,轻松和有效的众多功能中的几个。 查阅此博客文章,详细介绍所有令人兴奋的新功能以及如何使用它们来增强Apple应用程序的开发。 这是在Moveo Apps博客上发布的原始帖子的简短版本。 阅读全文