Tag: Swift 4

SWIFT中的OOP

OOP(面向对象编程) ,这是一个由三个字母组成的神奇词,几乎所有现代编程语言都可以使用该词。 SWIFT和APPLE的流行语言与此没有什么不同。 OOP概念是SWIFT的基础。 我已经指出的是,许多开发人员未能关联OOP的概念。 并不是我们不了解OOP,只是我们无法关联应用程序。 因此,伙计们有时间以SWIFTY的方式重新审视基本的OOP概念。 糟糕,我们将与SWIFT一同推出…..地狱……!!! 好的,我们将以SWIFTY方式介绍以下OOP的基本概念: 班级 对象 物产 方法 访问控制 封装形式 抽象化 遗产 方法重载 方法重载 多态性 我不相信技术定义,而是会通过实现相同示例的iOS示例以更现实的方式理解这些概念。 我建议您在操场上尝试一下。 :] 类: 可以将类与某个特定项目或物体或生物所属的真实世界组进行比较,并且每个组都具有与该组中存在的相似的属性。 例如-将“人”视为一个小组或班级。 无论男女,每个人都有共同的属性和属性。 码: 类人{ //您的个人属性和能力可以在此处定义。 //如果你是吸血鬼,不要写;] } 我们在这里做了什么: 我们宣布一堂课。 iOS示例: iOS的主要UI类UIView可以视为一个类。 对象: 对象是您看到的来自特定类的任何东西。 例如,狗,猫,钢笔,铅笔等,一切都是物体。 从我们的“人物”示例中,男人和女人是属于同一类(即“人物”)的对象的示例。 码: let man = Person() //我们创建了一个Person对象 我们在这里做了什么: 我们通过实例化创建了该类的对象。 iOS示例: 创建UITableView的出口时,我们将创建UITableView类的对象。 特性: 让我们再次回到前面的Person示例。 正如我之前所说的,每个人都具有一些共同的属性,特性和功能,而在所有群体中它们都是相同的,例如我们属于特定的性别,肤色,年龄等。因此,这些可以称为人的特性。类。 从技术上讲,类的属性是该类的公共属性,可以在派生自该对象的每个对象之间共享。 码: […]

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

精通CoreData(第9部分,NSFetchRequest)

NSFetchRequest用于访问现有数据。 从Core Data获取对象是此框架最强大的功能之一。 它定义了从缓存(NSManagedObjectContext)或持久性存储中搜索/查询/检索数据的条件。 我们在较早的教程中使用了获取请求。 请参阅第4部分到第8部分,我们使用NSFetchRequest提取了对象。 说明 图1,获取请求将告诉托管对象上下文要获取的托管对象的实体; (可选)它指定其他方面,例如对对象属性必须具有的值的约束以及希望对象返回的顺序 。 提取请求是NSFetchRequest的实例。 它指定的实体由NSEntityDescription的实例表示。 任何约束均由NSPredicate对象表示,而排序由一个或多个NSSortDescriptor实例的数组表示。 它们分别类似于数据库SELECT语句的表名,WHERE子句和ORDER BY子句。 您可以通过向托管对象上下文发送消息来执行获取请求。 上下文返回一个数组,其中包含与请求匹配的对象(如果有) 入门 您可以在此处下载启动程序项目。 在第5部分中,我们讨论了验证,因此请完全注释掉“ User + CoreDataValidations.swift ”文件,因为它会产生问题,如果您遵循以前的教程,请先删除该应用程序。 获取NSManagedObject实例 转到xcdatamodel→点击User Entity→查看我们之前添加的属性 ,如图2所示。 从Core Data获取记录的过程具有以下任务,如图3所示。 从appdelegate单例对象引用persistentContainer 从persistentContainer创建/访问单例托管对象上下文 创建了一个提取请求,以仅过滤实体名称为User的 NSManagedObject。 除了返回的实体类型之外,此示例未对该数据添加任何要求 您将获取请求交给了托管对象上下文,以完成繁重的工作。 fetch(_ 🙂返回满足fetch请求指定条件的托管对象数组。 方法有两个可能的结果。 它要么返回带有零个或多个对象的NSManagedObject类型的NSArray对象,要么抛出一个错误,您从Core Data那里收到了一个错误,需要对其进行响应 筛选 NSPredicate对象用于获取请求以缩小/过滤返回的对象数。 例如,如果只希望具有firstName = ali的 User对象,则将谓词直接添加到NSFetchRequest 为了说明这个例子,让我们深入研究代码。 首先注释掉“ User + CoreDataValidations ”文件,以便不再进行任何验证。 在图4中,我们做了几件事 首先,我们添加了两个用户 […]

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

收藏查看Swift 4-iOS11

今天,我们将在Swift 4 iOS 11 Xcode 9中讨论集合视图, 步骤1:建立新的Xcode专案 步骤2:创建MVC文件夹(Model View Controller) 在controller文件夹中,创建新的可可触摸快速文件(UIViewController),将其命名为MainVC,在View文件夹中,创建新的可可触摸快速文件(UICollectionViewCell) 步骤3:打开Main.Storyboard 从对象库拖动集合视图 将Class CollectionViewCell连接到我们的单元格 在单元格中添加名为proLbl Label,并通过单击将其连接,然后在键盘上按Control键并拖动到CollectionViewCell View中 步骤4:打开Controller — MainVC.swift 将UICollectionViewDataSource和UICOllectionViewDelegate添加到类中,然后添加这两个支持功能 func collectionView(_ collectionView:UICollectionView,numberOfItemsInSection部分:Int)-> Int { //返回section的行数。 } func collectionView(_ collectionView:UICollectionView,cellForItemAt indexPath:IndexPath)-> UICollectionViewCell { //返回配置的单元格对象。 } 添加一个数组变量以显示collectionViewCell中的数据 //创建一个包含我们的数据的数组 var array = [“第一个单元格”,“第二个单元格”,“第三个单元格”,“第四个单元格”,“第五个单元格”] 编辑numberOfItemsInSection函数以返回array.count func collectionView(_ collectionView:UICollectionView,numberOfItemsInSection部分:Int)-> Int { 返回array.count } 编辑cellForRowAt函数以返回单元格 func collectionView(_ collectionView:UICollectionView,cellForItemAt […]

Swift4和Xcode9将在您现有的代码中向您发出新警告,并在附近弹出…

Swift4和Xcode9将在您现有的代码中向您发出新的警告,在您调用Swift函数Objective-C函数的区域附近弹出。 例如,当初始化UIBarButtonItem并包含#selector(swiftClassFunction)时 。 别担心! 这里发生的是,您正在调用的Swift方法对于Objective-C函数而言并不是自动可见的。 我在初始化UIBarButtonItem时发现了这一点。 Init方法是从Objective-C派生的,因此当您使用#selector添加新的Swift函数时,Xcode现在对我们大吼大叫。 这就是@objc和@objcMembers起作用的地方……您可以同时使用两个选项,并且您决定要依赖于要设置的访问权限。 选项1)在您的Swift func()声明的开头添加@objc … @objc func rightBarButtonTapped(){} 这只会将此功能公开给Objective-C。 这可能是您根据自己的情况打开的所有内容。 选项2)将@objcMembers添加到您的类定义中… @objcMembers类ViewController:UIViewController {} 此选项将打开整个课程直至Objective-C。 如果您发现一些需要弥合的差距,这可能会更干净。 参考文献 问题明细-http://bit.ly/HackingWithSwiftWhatsNewInIOS11 隐藏警告-http://bit.ly/StackOverFlowHideWarning Swift Evolution票证— http://bit.ly/SwiftEVO-LimitingObjcInference

Swift 100 Days:Project 21 –通过手势和Youtube(如播放器和详细信息)放松Segue和NSNotification

环境:Swift 4 /日期:69〜78 /日期:2018年1月3日/时间:30小时 我学到什么: ・ NSNotification进行一个画面内“三个ViewControllers”的通知与重构・手势利用NSNotification解决冲突,滚动查看并平移手势 ・ Youtube喜欢播放器和细节 ・放开Segue 小知识: 1.展开Segue展开 Segue又称为返回Segue,在 Project 6的小知识有聊到,那时候还不甚全然清楚,后来才发现真是重要且好用。 情境: 您的App一开始不强制用户登录,但一旦要使用特定功能,如:留言,就必须得先登录。 这时,你要引导使用者进入登录画面,登录了,然后呢? 1.呈现方式到首页,让使用者再度从头寻找留言画面 2.放松Segue至刚刚的留言画面很明显的地,第二个是更好的用户体验。 2. NSNotification NSNotification俗称通知,一般来说是一个物件(发布者)向其他物件(订阅者)发送消息,Apple本身对于通知的使用也蛮连续的,像是Keyboard的弹起与收起UIKeyboardWillShowNotification / UIKeyboardWillHideNotification 。我在这个专案中,是使用在ViewControllers之间的监听来触发手势。 首先,开发者要先想清楚,是谁要听谁?又要听什么东西? 以我的案例,孩子要听父母的var enableChildScroll ,当父母的var enableChildScroll = true时,孩子的TableView, TextView or any scrollableView.isScrollEnable = true 。 也就是说,小狗眼前摆一盘食物,巴巴地望着主人,等待主人发号施令:「吃! (var enableChildScroll = true) ”,狗狗才可以吃(.isScrollEnable = true) 。 那我们就开始编码吧! 观察者:Child;被观察者:Parent 1.在ChildVC的ViewDidLoad做一个addObserver的动作,顾名思义,开始观察啰 [[子]] <> NotificationCenter.default.addObserver(自己,选择器:#selector(catchScrollNotification(notification […]

Swift 4中的UIButton动画

动画应用程序在Unterschied机械中的应用程序中的应用程序和应用程序。 您可以在Todo-List-App应用程序中查看Check-Button 以及 Bouncyness的遍历。 Einem Xcode Playground中的Der Prototypist。 文件和代码库的层级。 动画制作专家,所以通常没有时间安排。 动画,动画,动画,动画,动画,动画,动画) -Einen Kreis transformiert werden中的einerer Ausgangsform des abgerundeten Rechtecks。 Zudem wird der Text des Titellabels ausgeblendet,da dieser zum einen zugroßfürdie neue形成者和祖父anderenunschöneÜberlappungenverursacht。 到了新的时候,动画公司就开始了。 Der runde Button wirdschließlichauf 80%围网器Größeskaliert,um ihn imnächstenStepschließlichwieder dynamischvergrößernzukönnen。 线性动画 UIViewPropertyAnimators getriggert的完成处理程序。 Hierbei wird der eigentliche Bounce des Buttons春季动画制作。 Das Konzept提示者dieer Animationsart liegt darin,dass […]

Swift入门:常量

在总体上开始进行Swift或iOS开发之前。 我想问一个简单的问题: “您为什么要成为应用程序开发人员?” 您对事物的运作方式着迷吗? 您是否想执行一个革命性的想法? 如果您知道如何编码,您是否相信可以找到更好的解决方案? 还是只是为了钱? 如果这是您要寻找的金钱部分,那么从长远来看,很容易使您失去动力。 您必须对自己想做的事充满热情。 您应该很好奇知道事情是如何工作的以及如何将整个想法转化为应用程序。 应用程序开发不是一项枯燥的工作,实际上,它是最具创造力的过程之一,并且每一步都令人愉快😃。 话虽如此,让我们开始为您提供最新形式(打字时为v4.2)的一些Swift优势。 先决条件 如果您有使用任何编程语言进行编码的经验,此博客将更加有趣。 哦,是的,您将需要一台装有最新Xcode的Mac。 但是,如果您没有Mac,请执行以下操作:http://online.swiftplayground.run/,它可以使您在任何地方运行swift! 因此,请转到xcode>开始使用游乐场,或者更好的方法是直接转到http://online.swiftplayground.run/进行学习和编码。 你好,世界! 众所周知,程序员遵循愚蠢的传统。 其中之一是编写hello world程序。 因此,Hello World的Swift 4.2语法就在这里! 打印(“ Hello,world!”) 就是这样! 那是一个迅速的完整程序! 容易吧? 现在让我们学习如何快速定义变量和常量。 常数 我们使用关键字let创建常量,并且常量的值只能分配一次。 就像是双AA电池,您可以使用一次。 让名称=“授予” 让luckyNumber = 7 令百分比= 90.4 我们还可以像其他编程语言一样在一行中编写所有内容: 让名称=“允许”,luckyNumber = 7,百分比= 90.4 好的,所以我上面写的三个语句很容易理解,但是这里有很多事情要做。 让我们解码: 您可以看到,我从未尝试将’name’定义为String或将’luckyNumber’定义为int或将’percentage’定义为double。 这是因为提供一个值有助于编译器推断其类型,这意味着当我定义let name =“ Amit”时 ,编译器会自动将’name’作为String类型。 这实际上是Swift语言的功能。 您可能已经观察到我以一种不寻常的方式编写了“ luckyNumber”,这是因为许多Swift编码人员更喜欢以camelCase的方式编写变量或函数的全名。 […]