Tag: swift

快速有哪些可选项?

如果您是iOS开发人员,则可能遇到过敏捷的语言。 到那时,你们大多数人可能已经迅速成为专家。 当我开始学习Swift时,很难理解Swift中的可选内容。 因此,让我们了解它们是什么。 可选选项是快速编码的基本组成部分。 简单起见, 我们可以说可选函数帮助我们将好的代码与坏的代码分开,从而防止崩溃 。 不同的编程语言使用不同的预防措施来避免崩溃。 但是在大多数情况下,大多数人是无助的。 但是,在这种情况下,Swift更为实用,而可选选项将帮助您使代码免于崩溃。 嗯,这不是100%正确,但是它将帮助您编写更好的代码。 可选项不包含任何值或保留一些值 。 可选选项允许存储nil ,也就是没有值。 Optional类型是具有两种情况的枚举。 Optional.none等效于nil文字。 Optional.some(Wrapped)存储包装的值。 简而言之,可选是通用枚举。 为了便于理解,请看以下代码: 因此,optional是一个通用枚举,包含2种情况, none和some和某些方法。 请参考Apple文档以获取更多详细说明。 因此,让我们开始吧。 打开您的xcode并创建一个新的游乐场。 让我们开始前进。 //:游乐场-名词:人们可以玩耍的地方 导入UIKit var numberOfCrashes:整数? 请看上面的代码。 末尾的问号(?)表示它是一个可选变量。 如果在变量声明的末尾看到一个问号,请理解它可能包含也可能不包含值。 因此,在程序的某些部分,您不知道变量是否有值,然后将其标记为可选。 现在,尝试打印变量’ numberOfCrashes ‘的值。 打印(numberOfCrashes!) 变量末尾的感叹号(!)用于展开该值。 此时,代码将崩溃。 这是因为,您只需要强制解开一个没有值的可选变量即可。 您只是选择了一个可选变量,然后说:“嘿! ,给我以价值”,然后您尝试使用它。 但是,如果执行此操作,并且变量中没有值,则程序将崩溃。 //:游乐场—名词:人们可以玩耍的地方 导入UIKit var numberOfCrashes:整数? numberOfCrashes = 3 打印(numberOfCrashes!) 但是,如果在强制解开值之前为变量设置了值,则代码不会崩溃。 但是这种方式实际上是在滥用可选变量。 […]

Swift gRPC和Protobuf集成

最近,我试图将gRPC和SwiftProtobuf添加到我的iOS应用程序中,这样做有很多问题,并且在整个周末以及星期一都在墙上ash头。 因此,首先,如果您不熟悉gRPC和Protobuf,请访问官方网站http://grpc.io/。 如果您尝试在Google上搜索诸如how to create Swift gRPC app东西,或者具有gRPC or Swift gRPC任何东西, gRPC or Swift gRPC您很可能最终会找到gRPC github,这是一个很好的资源,但对于某些人来说确实不清楚第一次尝试将此出色的框架集成到他们的项目中。 我现在要做的基本上是为您提供一些必要的步骤,以便设置您的环境(即拥有一个满意的Xcode)。 从https://github.com/grpc/grpc-swift克隆swift gRPC存储库 cd到grpc-swift并进行make 然后在grpc-swift cd third_party内部 在third_party文件夹中,您具有swift-protobuf cd 然后做一个 所以现在您将在 swift-protobuf文件夹中拥有SwiftProtobuf.xcodeproj ,在根目录grpc-swift 现在是时候将这些人添加到您的项目中了。 如果您要构建Mac应用程序,这会更简单一些,但是我将介绍iOS应用程序的步骤 创建一个新的iOS项目 将这两个.xcodeproj文件拖放到根项目下的项目中。 11.然后打开项目设置,然后转到“常规”选项卡。 12。 在嵌入式绑定器中,单击plus,然后添加BoringSSL,CgRPC,gRPC和Czlib框架。 13.如果您执行build,则将至少遇到一个编译错误,该错误表示无法找到CgRPC. 14.返回项目设置,然后选择“构建设置”选项卡并搜索搜索路径。 15.在您的System Header Search Paths和System Framework Search Paths添加“ / grpc-swift / Sources / CgRPC / include System Framework […]

Swift 4:使用可编码协议处理复杂的JSON结构

在任何应用程序中,最常见的功能之一就是解析来自服务器的响应,该响应主要以JSON字符串的形式出现。 虽然在android和其他平台中,有一些库可以用来解析并返回您填充的模型,但与此同时,iOS中缺少此主要功能。 JSONSerializer确实生效了,但是它所能做的就是将您的JSON字符串/数据转换为字典。 因此,您可以自己填充模型,同时要记住类型转换和错误处理。 这不仅增加了代码的大小,而且还花费了很多时间,尤其是在处理庞大而复杂的JSON文件时 解析不带编码的JSON 这是一个看起来很丑的Apple博客,用于在Swift中解析JSON 在Swift中使用JSON – Swift Blog 从创建它的工程师那里获取有关Swift编程语言的最新新闻和有用的提示。 developer.apple.com

Option trong迅捷

Trướckhinóivề可选,按chúngtasẽnóisơlượcvềnil。 与Objective-C错误,nillàcontrỏtrỏtớimột对象khôngtồntại。 发生崩溃时,Vàkhichúngtasửdụngmộtbiếncógiátrịnilđôikhisẽkhiếnứng 斯威夫特(Trong Swift),nilkhôngphảilàcontrỏ,cũngchẳngphảimột原始语,mànólàsựquyướcthhiểnsựvắngmặtgiátrịcủamộtkiểudliệunàođó。 可选làgì? Nóimộtcáchvắntắt,可选的làmộttínhnăngrấtmạnhmẽcủaSwift和giúpchươngtrìnhtrởnênantoànvàítbịcrashhơn。 可选的hoạtngdựatrênnguyêntắcsựvắngmặtgiátrị 。 Chúngtasửdụng可选chomộtbiếnhoặchằngnàođókhibiến/hằngcóthócógiátrịhoặckhông。 Nóinômna,chútacóthembiến/hằnglàtráitáo,可选giốngnhưmộtcáihộpđựngtáo,scóhaikhảnăngxảyra khichànghai h cp hhaiphởphộp,mộ chảcógìcả。 Kíhiệucủa可选là 可选 vớiTlàkiểudữliệu,đểngắngọnhơnngườitadùngkiểuviếttàtlàT ? Mộtbiếncókiểu可选的(hay Int?)cónghĩalàbiàncóthểcógiátrịlàmộtsốnguyên,hoặclànil。 CòmộtbiếncókiểuIntthìchỉcóthểcógiátrịlàmộtsốnguyên。 Đặctính 可选chophépchúngtagánbiếnbằngnil。 i vchitrườnghợpkhôngphải可选,chúngtakhôngthểgánbiếnbằngnil: Khikhôngđặgiátrịmặcđịnh,biến可选cógiátrịkhởitạolànil。 Khikhôngđặtgiátrịmặcđịnh,biếnkhôngphải可选khôngcógiátrịkhởitạonàocả。 强制展开(!) Khichúngta khaibáovàsauđósửdụngbiến可选,编译器请按以下步骤操作: VìlúcnàybiếndcókiểulàInt ? chứkhôngphảiInt,chúngtamuốngiátrịIntcủadítínhtoánthìphảilàmsao? forceiềunàyđẫnđếnkháiniệm力量展开。 强制展开làviệcchúngta camđoanvớitrìnhbiêndịchrằngmộtbiến可选nàođóCHẮCCHẮNCÓGIÁTRỊ ,giốngnhưviệcchúngtahởpáàáong ong t t ongậ(un Để强制解开mộtbiến可选,tasửdụngdấu ! phísaubiếnđó。 如果nhưsau,则请继续: M Stringtvídụkhácvớibiến字符串: Sau khichạyđoạncodetrên,双向调查 Answercókiểudữliệulà可选nêncógiátrịlà 可选(“否”) 。 survey […]

🥊Luta反对o XCode

Cansado de esperar horas para compilar um simples projeto? XCode可以快速构建项目,也可以快速构建项目。 Parece ser um problema generalizado,开发人员在多种语言中遇到的问题,因为没有构建 Xcode会遇到问题。 Luta反对或XCode Então,chega de papo! 拟议的人文历法和基本的法则! 公开竞猜11简而言之,一个干净的密码。 程序菜单,produzir女主角! Acontece que issonaãoparece ser uma boa alternativa para o compilador,que algumassituaçõesse conconfe ao inferir tipos efunções。 Veja alguns示例: 1.无合并运算符 乌拉圭乌兹别克斯坦乌拉圭回合的临时舞弊杂费收入税率95% 2.铸造CGFloat对CGFloat Chega a serengraçado,mas手形valores CGFloat especificando quesãode fato CGFloat pode custar um […]

控制流…

快速地,对于条件需求,我们有“ if ”和“ switch ”语句,对于循环需求,我们有“ for-in ”,“ while ”,“ repeat-while ”,“ stride ”语句。 如果: 如果,否则,如果,嵌套if语句… 在“ if”语句中,条件必须是布尔表达式。 迅速地,我们使用“ if let”语句来检查可选变量是否具有值。如果存在nil值,则大括号中的代码将被跳过。 示例2显示了如何使用嵌套的ifs和else-if语句。 例如: var myName:字符串? =“达里奥” //如果存在名字,请用他的名字打招呼 如果让名称= myName { print(“ Hello!\(name)”)//打印“ Hello! 达里奥” } 范例2: var totalMarks = 780 var isPassedInAllSubjects:Bool = true 如果totalMarks> 900 { 如果isPassedInAllSubjects { 打印(“获得第一名”) }其他{ 打印(“失败”) } }否则,如果totalMarks> 700 { […]

2018年:iOS版本和CI / CD流程的年度最大变化。 如何为2019做准备

原始链接: 2018年:iOS版本和CI / CD流程的年度最大变化。 如何为2019做准备 在2018年,Mobile DevOps和CI / CD世界被一些重要的公告和新闻所动摇。 这些公告是… shashikantjagtap.net 2018年:iOS版本和CI / CD流程的年度最大变化。 如何为2019年做准备– XCTEQ 在2018年,Mobile DevOps和CI / CD世界被一些重要的公告和新闻所动摇。 这些公告是… www.xcteq.co.uk 在2018年,Mobile DevOps和CI / CD世界被一些重要的公告和新闻所动摇。 这些公告来自Apple或开源社区,但是这些公告肯定会改变传统的iOS应用CI / CD制作方式。 在本文中,我们将回顾2018年,展望2019年。我们将看到2018年iOS应用程序的Mobile DevOps和Continuous Delivery中发生了哪些变化,以及它将如何影响iOS中的iOS版本和CI / CD流程。 2019。 在2018年的元旦,苹果收购了BuddyBuild,Mobile DevOps中的情况发生了巨大变化。 BuddyBuild是针对移动应用程序的出色云CI / CD服务之一。 自从BuddyBuild成为Apple的一部分以来,他们就停止了对Android应用程序的支持。 也停止了为iOS应用吸引新客户。 这对于使用Android和iOS的BuddyBuild服务的公司来说,是一个巨大的震惊。 这些公司需要为Android应用程序寻找另一项CI / CD服务,这将导致昂贵的迁移工作。 对于使用基于云的CI / CD服务的公司来说,这也是一个重要的教训,这使他们思考是内部管理移动基础架构还是将其外包给其他公司。 我们在这里介绍了内部管理移动DevOps基础架构的利弊。 苹果与BuddyBuild的合并也使Xcode Serve的未来成为问题。 对于目前使用Xcode Server的公司来说,这也是一个警钟。 寻找适用于Android和iOS的通用跨平台移动CI […]

如何使用Swift处理“#”和“ @”超链接!

过去,使用“#”和“ @”进行工作对我来说一直是一项具有挑战性的工作,但是我终于找到了一种处理问题的好方法。 设置 首先,这在TextView中效果最好。 因此,可以根据需要在视图内部设置一个,但请确保ViewController具有UITextViewDelegate并将textView委托给该视图控制器。 我也使用一些预填充的信息来执行此操作,但是相同的概念适用于从数据库中提取数据,而并非如此。 [为了教程起见,我使用情节提要板设置了textView。 快速简单。 不要伤害我。] 这是我们设置ViewController的方式: ViewController类:UIViewController,UITextViewDelegate { var string =“您好,我叫@Jared&#Jared,我喜欢移动它。” @IBOutlet弱var textView:UITextView! 覆盖func viewDidLoad(){ super.viewDidLoad() textView.text =字符串 textView.delegate =自我 } … 符号解析 现在,我们进入真正的坚韧不拔的东西! (呜!) 我们在这部分中要完成的总体任务只是将textView中的所有单词拆分开。 它比您想象的要简单: 首先,让我们创建扩展: 扩展UITextView { func resolveTags(){ [向前,这只是将内容添加到resolveTags函数中,直到我另外声明为止] 将我们的字符串转换为NSString。 这允许分离组件。 让nsText:NSString = self.text作为NSString 使用.compenents(separatedBy:“”)<-将该单词分开,在引号中包括该空格。 这将使我们能够分解单个单词。 让单词:[String] = nsText.components(separatedBy:“”) 为您希望文本在TextView中显示的内容设置几个属性。 这些属性将应用于您调用resolveTags的任何TextView,因此请执行以下操作: 令attrs = [ NSAttributedStringKey.font:UIFont.init(名称:“ HelveticaNeue”,大小:13), NSAttributedStringKey.foregroundColor:UIColor.black […]

Xcode构建速度慢

这将是一项快速检查,以了解导致Xcode Build变慢的原因–我从几个不同的来源获得了此信息,但认为这对某人有用 1-打开debug-time-function-body在Xcode项目中,转到Build Settings并将其他Swift Flags设置为-Xfrontend -debug-time-function-bodies 。 构建设置>搜索其他快速输入 2.按⌘-B再次构建项目 3.构建完成后,转到导航器,然后选择“显示报告导航器” 4.在报告视图中,右键单击构建目标 5.选择展开所有成绩单 6.向下滚动时,您将看到快速文件以及构建这些文件所花费的时间,即109.05ms。 7.如果要对它们进行排序,请选择“复制成绩单以显示显示的结果”,然后在终端中:pbpaste | egrep’\。[0–9] ms’| 排序-t“。” -k 1 -n | 尾-10

KPCC API客户端:创建框架

KPCC正在开发我们的iPhone应用程序的新版本,这可能是最难保留的秘密,至少对我来说是最重要的-这个人负责编写它。 该项目的设计目标很多(我保证,至少会写一篇专门的博客文章!),但是更引人注目的机会之一就是创建一个更加模块化的代码库。 为此 ,我们的早期想法之一是将与KPCC API的所有交互分解为一个单独的框架。 KPCC API是我们的iPhone应用程序(以及其他一些项目)与服务器进行通信的渠道。 这是我们检索节目,新闻标题和剧集列表以显示给用户的方式。 我们应用程序的重要部分涉及对基于JSON的API进行各种网络调用,并构建一个供我们的应用程序使用的模型(使用Program,Article和Episode struct实例等)。 如果将其与应用程序的其余部分分开,那会不会很好? 我同意! 原因如下: 模块化鼓励程序员在API客户端代码和项目的其余部分之间严格区分关注点。 这改善了可维护性。 该API客户端可以在其他Swift(和Objective-C!)项目中重用,甚至可以在其他平台(例如macOS,tvOS,watchOS或高端的服务器端Swift框架,例如Vapor)上使用。 尽管我们目前没有任何消息要宣布,但这确实为以后的实验打开了大门,因为我们所做的几乎所有操作都会与API进行交互。 代码重用意味着调试的代码更少了,使用的代码更多了,因此随着发现和平滑接缝,它变得更加扎实。 当然,在任何项目忙碌的初期,很容易编写大量代码来引导它,而无需考虑使其模块化,因此我们的API客户端代码最初直接集成到了项目中。 但是现在我们正处于发布新iPhone应用程序的风口浪尖上,我花了一些时间重新讨论以框架形式进行的单独KPCC API客户端项目的想法。 创建框架 框架是相关代码的集合,可以将其嵌入Xcode项目中以提供通用功能。 每个iOS应用程序都依赖于一堆系统提供的框架(您好,UIKit!),并且大多数不平凡的框架都至少包括几个第三方框架。 创建我们自己的框架并不难,但是有一些陷阱。 我将详细说明以下步骤,并提供一些指导以帮助您创建自己的步骤。 要在Xcode中创建框架,请从菜单栏中选择File> New> Project ,然后确保已为项目模板类型选择iOS 。 选择“ Cocoa Touch Framework”选项,然后单击“ 下一步” 。 系统将提示您提供产品名称。 这是您的框架的名称,应简短且具有描述性,不能带空格或连字符(我使用“ KPCCAPIClient”)。 单击“ 下一步”,然后将项目保存到任意位置。 切入 创建项目后,我便开始从主要的iOS应用项目中移出与API相关的源文件。 对我来说,这是一个思考的时刻,因为我很快意识到与API相关的代码与不与API相关的代码混合在一起,因此必须分开。 尽管这导致了相当繁琐的修剪,但也验证了制定外部框架的决定。 如何知道现有项目中要添加什么和要保留什么? 好吧,这取决于项目。 我决定将这个项目限制为处理API调用并定义它们生成的模型结构。 像任何框架一样,应该整洁。 另外,不用说,任何涉及视图的内容(数据表示形式)都被排除在外。 使用我们的框架的项目将以最适合其目的的方式处理任务本身,从而得到最好的服务。 移走所有内容并清除了所有不适合的代码后,您应该能够构建框架项目,而不会出现任何警告或错误(除非已经有警告或错误,在这种情况下,您应该解决这些问题)! )。 嵌入 […]