Tag: swift

一个用于String和HTML的Swift扩展

收到的最常见的每日请求之一是从后端管理html字符串,以在UILabel中正确呈现它们。 在大多数情况下,iOS应用程序需要与Web应用程序共存,与UILabel相比,Web应用程序可以更有效地解析HTML。 在NSAttributedString彻底改变游戏规则之前,所有这些都是真实的。 UILabel对象还可以在其名为attributedText的属性中接受特定值: 让aLabel = UILabel() 一个标签。 attributedText = NSAttributedString(字符串:“你好,世界!”) 显然,仅将HTML文本作为此属性的值是不够的…否则就没有理由写这篇文章了。

持续学习曲线(2018年2月)

2月12日,星期一 MVVM-C:一种简单的导航方式 在Swift中避免单例 MVVM-C实际示例代码 2月13日,星期二 MVVM-C iOS示例应用程序 架构iOS应用程序:协调员 9个月后的Swift经验 MVVM-C iOS示例应用程序 使用协议默认实现而不是抽象类 弹射 Swift 4的灵活视图控制器接口 5调用iOS应用 2月14日,星期三 安全的iOS应用开发 很棒的采访 编写高性能Swift代码 莫亚 快速提示和技巧 Big Tech如何使用GitHub 成为一名多语言程序员 在iOS中将MVVM与表和单元格一起使用 函数式编程的要素 地图和FlatMap魔术 2月15日,星期四 基于中继的开发与Git Flow iOS集中式和解耦网络:具有Singleton类的AFNetworking教程 CloudKit指南:如何在iOS设备之间同步用户数据 流 如何在Swift(第二版)中编写网络层 爱马仕网络 大多数Swift开发人员不知道自己犯的错误 迅速的表现 2月16日,星期五 迅速项目模板 初创公司Swift 2月19日,星期一 行为驱动的发展 信任第三方SDK 两个有用的环境变量 iOS上的Cleaner Architecture 谁杀死了初级开发人员? 面向协议的MVVM 2月20日,星期二 清洁架构:Swift中的网络 在Swift中导航 适用于iOS工程师的30多种出色的UI套件 2月22日,星期四 小型网络库 […]

在这里变态

完全公开,我不是作家/博客作者,文字和类似内容并不是我的强项,所以对不起,您需要仔细阅读。 真的 我在那里见到你……眼中闪闪发光,并提出了一个很棒的想法,希望这款应用在一个星期内让你成为百万富翁。 我不会劝阻你的。 恰恰相反,我会让你像从未飞过的天空一样飞向天空,只是意识到人类不会飞,而且你期望过高,所以现在你只剩下一碗矮牵牛冲向地面公司。 因此,无论您是刚刚决定要从事的职业的年轻人,还是刚意识到自己目前的工作不会长期减少,不用担心! 下面,我将分享我刚开始时使用的一些资源,并尝试为您提供一些提示。 就质量而言,此列表没有特别的顺序,但是我选择的路线更多,尽管其中一些网站对我不起作用,但这并不意味着它们也对您不起作用。 树屋 当我对编程一无所知时,Treehouse团队为我提供了很多帮助。 如果您尚未确定哪种编程语言最适合您,这是一个很好的资源,并且您希望将脚趾插入其中以了解其背后的语法和整体思想。 在树屋上,您有14天的试用期,之后可以订阅,然后打开整个教程库,您可以无限制浏览。 除了Swift,当然还有很多其他语言可供选择,甚至有些教程根本不涉及编程,但是您需要在某些领域提供更多的知识。 我建议您使用该试用版来尝试看看语法是否对您完全有用,因为您将大量地使用它,因此您最好喜欢它! 优点:由GREAT老师精心组织的教程,以及几分钟的简短课程,之后您将进行一些小测试以增强对所学知识的了解。 我喜欢他们的用户界面! 缺点:更高级的教程不那么容易理解,一段时间后我发现自己很挣扎。 一章非常简单,然后突然很难完成所有代码的粘贴和跳转,之后将在一些教程中对此进行解释。 不那么喜欢它。 结论: Treehouse是具有良好结构的绝佳起点,它将为您提供良好的基础知识,以使您进一步发展。 我不再使用它了,但几个月后它帮助了我很多。 我绝对推荐绝对的初学者。 这是与树屋类似的网站,具有相同的订阅模式,但是…预订! 如果您想按自己的进度学习,并且不想暂停视频或倒带,那么这是一个很好的资源。 他们有大量的教程,您可以逐步学习,观看视频或获得涵盖更多的书籍! 我在观看了许多视频教程之后发现它令人耳目一新,在这些视频教程中,您无法停在任何想要的地方,并且当您觉得自己必须完成本章时。 通过添加基于文本的教程,我发现更容易确定我想以什么速度前进,并且更容易返回并重新阅读语法的某些部分。 如果您对订阅不感兴趣,则可以获取涉及特定主题的众多书籍之一。 这些书的妙处在于,每当语法更改和新版本的Xcode出现时,它们都会更新。 对于像Swift这样的年轻语言,这确实很重要。 使用每一个新的Swift版本,您都可以转到本书的特定章节,并了解如何在最新版本中解决该问题。 优点: RW.com背后是一个由优秀的开发人员和老师组成的团队,他们试图使您了解最新的新闻和趋势。 教程每隔一天就会弹出,即使您对购买某些书籍或订阅不感兴趣,也有大量面向初学者的免费教程。 就像我上面提到的那样,基于文本的教程对于某些人可能会更好,但是对于我们那些懒惰的人来说也有视频🙂 缺点:没有详细解释所有内容,本教程的重点是使您使用最短的路线从A到B。 从书中粘贴粘贴,然后阅读有关您刚刚粘贴的内容,有时可能会造成混淆,尤其是对于较大的代码块而言。 当然,应该键入而不是复制粘贴,但是键入您不了解的内容可能会违反直觉。 结束语: RayWenderlich.com适合于基本知识的用户,可以更快地移动并理解代码,而无需几次阅读。 他们的教程数据库非常疯狂,因此它将使您忙碌一段时间。 于安琪(yu) 你们中的大多数人可能都熟悉Udemy。 它提供有关您可以基本学习的内容的教程。 在我抱怨自己所做的事情似乎没有解决之后,我得到朋友的推荐,以查看一些教程。 经过快速搜索,我发现了4-5个非常不错的训练营,因此我浏览了他们的“预告片”视频,老师在几分钟内解释了您将学习的内容以及教程的结构。 安吉拉说的一件事确实引起了我的注意: “您不仅将学习如何做某事,而且还将解释为什么您正在做某事” 那一刻,我知道我来对地方了,那是我一直在寻找的确切东西,我觉得我需要真正地理解代码,而不仅仅是学习它。 如所承诺的,一切都将详细解释,您将以非常好的步伐前进。 我发现最重要的事情是,在完成某一章的工作后,我感觉自己知道如何独自制作该应用程序,并且真正了解了应用程序的功能。 您将永远不会怀疑… 优点:您可以在很短的时间内从绝对的初学者变成一个体面的开发人员。 您永远都不会感到有些不说什么,并且会学到一些非常酷的最新知识。 […]

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 […]

Swift:在视图之间传递数据

อกส่งากส่ง数据📲นไปใช้ใน้าถัดไปด้วยต้องทำไงอะ🤔 1.第一种方法-通过Segues传递数据 ส่ง数据โดยใช้ Segues …。 แล้วไอsegueนี่คือไร? ู้จักอนอื่นต้องรcomponent导航控制器ก่อน导航控制器คือiOS组件หนiOSแอพพลิเคชั่นมันจะถูกใช้เพื่อสร้าง界面หรือviewซึ่งมีการเปลี่ยนแบบเป็นลำดับชั้นไม่มีการข้ามไปข้ามมามมาเช่นแอพContacts /设置/等等แบบนี้! …。 什么是segue? 首先,您必须了解导航控制器导航控制器是iOS应用程序中的UI组件。 它为分层内容提供了向下钻取界面,例如Contacts / Setting / Etc应用程序(如下面的GIF)。 塞格 storyนStoryboardปกติ场景จะเป็นตัวที่ใช้อ้างถึงส่วนที่ประกอบอยู่บนหน้าจอจะคิดง่ายๆว่าเป็น视图控制器ก็ได้และsegueจะมีลักษณะเป็นลูกศรที่แสดงถึงการเปลี่ยนจาก场景หนึ่งไปยังอีก场景(过渡)โดย公交车,模态 Segueสามารถประยุกต์ใช้ได้หลากหลายเช่นเปลี่ยนไปใช้กับCollectionViewหรือTableViewเป็นต้น 在情节提要中,场景是指屏幕上的内容。 Segues位于两个场景之间,如箭头所示。 它代表从一个场景到另一个场景的过渡。 两种常见的过渡类型是“推”,“模式”。 您还可以调整定序以与其他视图一起使用,例如CollectionView或TableView。 第1步-嵌入导航控制器 คลิกที่视图控制器(根视图) 单击视图控制器(根视图),然后 编辑器 -> 嵌入 -> 导航控制器 第2步-创建Segue กด控制แล้วลากจาก按钮ไปหา第二视图เลือก过渡ตามที่ออกแบบมา 按Control +拖动按钮到第二个视图,然后按设计选择过渡。 步骤3 —设置Segue的标识符 Appตัวหนึ่งส่วนใหญ่ก็อาจจะมีการใช้งานมากกว่า1 sequeจึงจำเป็นต้องระบุ标识符ลงไปด้วยเพื่อที่จะทราบว่ากำลังใช้sequeตัวไหนอยู่(ตัวอย่างดู步骤4) 有时,一个应用程序中存在多个问题。 因此,有必要为以后的实现定义seque的标识符,以便让您知道要实现的seque(第4步中的示例) 第4步—覆盖函数为定序做准备 seceneกใช้ืืกใช้seque 函数准备prepare ีีกก่ที่จะไปสู่ที่จะไปสู่เพื่เพื่จัดกื่ื่มๆแล้วแต่จะืื 当一个正六边形更改为另一个正六边形或使用Seque时,在更改为另一个视图后也将调用“准备”功能。 调用“准备”功能是为了让您准备数据等。 准备(针对segue:UIStoryboardSegue,发件人:是吗?){ } 2.第二种方法—使用UIStoryboard จับ第二个视图มา分配值ดื้อๆเลย 使用UIStoryboard直接设置变量 第1步-设置情节提要ID 第2步-创建变量以引用SecondViewVC […]

Swift中MVC的替代方法:基本MVVM结构

MVVM(模型-视图-视图-模型)和MVC(模型-视图-控制器)是iOS设计模式。 Apple将设计模式定义为设计的模板,以解决特定情况下的普遍性重复性问题。 它是一种抽象工具,在诸如体系结构和工程以及软件开发等领域非常有用。 在MVVM中,我们在不同的MVC层之间添加了一个称为ViewModel的层。 它由引用我们要表示或交流的实例的类或结构组成。 假设我们要列出服务的结果。 在此示例中,我将列出新闻来源。 为了做到这一点,我创建了Source模型类: 类来源{ var id:String 变量名:String var说明:String init(id:String,name:String,description:String){self.id = id self.name =名称 self.description =说明 } // … 如果我们想在ViewController中列出我们的Sources,我们可以使用一个封装Controller所需信息的类。 我们称它为SourceViewModel: 类SourceViewModel {var id:String 变量名:String var说明:String init(source:Source){self.id = source.id self.name =源名称 self.description = source.description } // … 但是,控制器需要的信息不是来源的信息,而是来源列表的信息。 因此,我们需要诸如更高级别的视图模型,源(列表)视图模型之类的东西。 创建它: 类SourceListViewModel { private var webservice:Web服务 私有(一组)var sourcesViewModel:[SourceViewModel] = [SourceViewModel]() 私人var完成:()->()= {} […]

远程通知样本

要模拟远程通知,您需要配置iOS应用和提供商服务器。 如果您还不了解通知,则需要阅读我撰写的有关本地通知样本的文章。 以下是我在阅读有关通知的所有Apple文档之后并结合NodeJS的基本知识后制作的视频: 在应用程序上配置远程通知 要为您的iOS应用配置远程通知,您需要按顺序阅读以下Apple文章。 它描述了您需要的所有东西,除了服务器端特定编程语言的代码。 向APN注册您的应用 与APN进行通信,并接收可标识您的应用程序的唯一设备令牌。 注意 :要获取设备令牌,您还需要在设备上运行应用程序以及用户权限以显示通知(通过使用UNUserNotificationCenter对象的requestAuthorization(options:completionHandler:)方法)。 设置远程通知服务器 设置服务器以生成通知并将其推送到用户设备。 生成远程通知 使用JSON负载将通知发送到用户的设备。 向APN发送通知请求 将您的远程通知有效负载和设备令牌信息发送到APN。 建立与APN的基于证书的连接 通过在提供商服务器上安装证书来保护与APN的通信安全。 建立与APN的基于令牌的连接 使用无状态身份验证令牌,通过APN保护您的通信。 静默地将更新推送到您的应用程序 传递静默通知,并在用户设备的后台唤醒您的应用程序。 如果您停留在上述任何步骤,都可以在此处下载完整的iOS应用项目。 在服务器上配置远程通知 首先,您需要下载在NodeJS环境上运行的示例服务器项目。 该项目使用基于证书的连接,与基于令牌的连接相比,它部署起来更简单。 打开provider-server.js文件,您将看到以下内容: 您需要为该服务器的操作提供3件事: cert.pem文件的路径 key.pem文件的路径 设备令牌 要获取cert.pem和key.pem文件,您需要阅读本文。 我还使用node-apn节点包来支持发送通知。 你可以在这里读到它。

核心图形样本

首先,要测试Core Graphics的一些示例,您需要创建UIView的子类,并将带有该子类的视图添加到情节提要中。 之后,请阅读以下有关Core Graphics的文章,以帮助您对其进行基本了解。 核心图形 利用Quartz技术的力量执行具有高保真输出的轻量级2D渲染。 处理基于路径的绘图,抗锯齿渲染,渐变,图像,颜色管理,PDF文档等。 CGContext Quartz 2D绘图环境。 UIGraphicsGetCurrentContext() 返回当前的图形上下文。 接下来,按如下所示重写UIView的func draw(_ rect: CGRect)方法: override func draw( _ rect: CGRect) { } 您将在此处放置所有绘制方法。 首先,您需要获取当前上下文: let ctx = UIGraphicsGetCurrentContext()! 接下来的每个绘图操作都需要使用此ctx变量。 如果您遇到以下任何问题,可以在此处下载完整的源代码项目。 1.填充背景色 就这样。 您可以在此处下载完整的源代码项目。

通过在XCode中构建AirBnb应用程序来学习UIStackView

UIStackView仅在IOS 9.0中添加到Apple的UIKit中,使其成为该家族的最新成员(如果仍然是2015年)。这没关系……因为UIStackViews不仅在布局上是通用的,而且还没有得到应有的恕我直言,所以我们可以: 构建复杂的布局,而不会使我们的View Controller过度拥挤 在运行时更改布局,而无需进行繁琐的约束操作 视图自动调整自身(即,如果您要添加动画) 让我们通过构建一个受AirBnb令人误解的复杂布局启发的简单页面来演示这一点: 使用堆栈视图构建页面的关键在于将布局分解为可堆栈的容器的能力。 没有将布局分解为堆栈的单一组合,因为此过程取决于页面的美学偏好。 例如,上面的示例页面包含嵌套的水平和垂直堆栈的层次结构。 首先,让我们关注红色容器中包含的堆栈。 注意适用于主图像下所有元素的左右边框。 可以在垂直堆栈的声明中实现此效果。 因此,进入“堆栈4”(带填充的垂直堆栈)的所有视图都不需要水平间距约束。 堆栈要求其包含的所有元素都具有固有的内容尺寸,除非堆栈受其父视图明确约束。 在进入“堆栈4”的所有视图中,只有三个是堆栈。 垂直堆栈中包含的其余视图将是视图本身。 这三个嵌套堆栈分别标记为“堆栈1”,“堆栈2”和“堆栈3”。 1.“堆栈1”(嵌套的水平堆栈) “整个家”标签 “由dotcookiez托管”标签 个人资料图片imageView “堆栈1”由间距为3pt的常规垂直堆栈组成。 如图所示,需要左对齐以使标签保持左对齐。 使用我的AutoLayoutExtensions类,可以使用以下行完成此操作: 让stack1a = verticalStack(.leading,间距:3,视图:homeLabel,hostedLabel) 要将配置文件imageView与垂直堆栈组合,请使用返回的垂直堆栈和配置文件imageView创建一个水平堆栈。 请记住,必须限制个人资料图像的宽度和高度才能可见。 profileImage.setWidthAndHeight(65,高度:65) 让stack1 = horizo​​ntalStack(.center,间距:0.0,视图:stack3a,profileImage) 2.“堆栈2”(嵌套水平堆栈) “ 5位客人”图标 “ 2个房间”图标 “ 3张床”图标 “ 2浴”图标 此嵌套堆栈由水平对齐并中心对齐的四个图标组成。 尽管将间距设置为0(默认间距值),但其宽度稍后会受到垂直堆栈的限制,因此只需确保等间距的中心对齐即可完成自动分配技巧。 guests Icon.setWidthAndHeight(55,高度:55) roomsIcon.setWidthAndHeight(55,height:55) bedsIcon.setWidthAndHeight(55,高度:55) bathsIcon.setWidthAndHeight(55,height:55) let stack5 = horizo​​ntalStack(.center,间距:0,views:guestIcon,roomsIcon,bedIcon,bathsIcon) 3.“堆栈3”(嵌套的垂直堆栈) […]

代码挑战:在Swift中遍历数据结构

最近,我有机会帮助iOS面试计划的学生为大多数人认可的公司准备了一次重要的技术面试。 总体而言, 我的课程融合了代码挑战和实时白板会话的组合,测试了人们在Swift中实现语法,设计模式和算法的能力。 挑战 有时,我会听到人们回覆他们的采访经历。 有时,某些类型的问题会使开发人员感到惊讶。 如果您意识到了挑战,那就太好了! 对于我们其他人,这里是摘要: //给出以下树: // 1 // 2 3 // 4 5 7 // 8 9 //由此类实现: 类 基站 { var键:T? 左变数: 基站 ? 右: 基站 ? var高度: 整数 在里面() { 自。 高度 = -1 } } //使用以下函数获取以下输出: //预期输出: // 1 // 2 3 // 4 5 7 // 8 […]