Tag: 斯威夫特

GCD解决方案的比赛条件

在上图中,您可以看到: 附录🌎已分配给线程2。 修改 ⚽已分配给线程5。 由于我是有意添加usleep(3)的,因此您可以看到Modify⚽得到了一个Error: Index out of range 。 两个线程访问相同的资源均导致此竞态条件 。 有几种方法可以解决此问题。 同步 同步的作用是确保完成指定的任务,这意味着告诉队列中的下一个任务等待。 屏障 当屏障执行时,它就像一个串行队列。 仅执行指定的任务。 屏障完成后,队列返回到正常的并发队列。

ARKit:跟踪,场景理解,渲染

从ARKit的图片上,可以发现有三层的结构,分别是跟踪,场景理解,渲染 1.追踪 关于世界跟踪 ,这边想要提一下SLAM (同时定位和映射),也就是当iphone来到一个陌生环境时,能同步地,构造出与周遭环境,时间与空间的关系,可以从这篇文章知道更多。 ARKit即是利用VIO (Visual Inertial Odometry)的技术,来构建出虚拟物体与真实环境关系。 AR技术上,相较于google的Tango手机,iphone不需要额外的设备(广角镜头和红外线感测器),关于更多VIO技术,就要再跟google大神请教。 2.场景不足 World Tracking分析并理解,设备当前所处的空间周遭之讯息。 使用hit-Test的方法(见ARHitTestResult类),可以想像成成点击画面中的一个点,iphone发出射线,返回关于那个点在真实环境的资讯,找到相机画面的点,相对于真实世界的位置。 如果在ARWorldTrackingSessionConfiguration启用planeDetection中 ,ARKit会检测相机画面中的水平面,得到其位置与大小,我们就能把虚拟物体放在真实世界的平面上。 目前只有水平面的侦测 ,根据stackflow上的答案,有人在WWDC与Apple工程师对谈中发现, 垂直面的侦测是未来会增加功能。 Light Estimation (环境光预测),利用相机的感测,调整虚拟物体画面,整合虚拟物体在相机画面上,与真实世界划分,不会突出突出,不自然。 3.渲染 与官方的SDK SceneKit,SpiritKit,Metal整合,呈现3D或2D虚拟画面,还有与外部的Unity,虚幻引擎合作。 最佳做法和局限性 不清晰的场景,会降低AR体验,像是相机对着一面空白的墙,或者太暗的场景。 2.移动得太快或距离太远,也会降低AR体验。 3. planeDetection需要一点时间,一开始可能会检测到的不正确,一但发现完理想的水平面后,最好将planeDetection关掉,避免已设置好的虚拟物体又被更动。 关于了解AR,可以详见Apple提供的官方文件。

蒸气服务器端-iOS

Vapor是服务器端Swift 打开终端。 :〜test $ eval“ $(curl -sL check.vapor.sh)”✅兼容Xcode with兼容Vapor 2:〜brew install vapor / tap / vapor:〜mkdir vapor:〜cd vapor /:〜vapor new HelloVapor —分支= Beta $ cd HelloVapor / $打开。$ vapor xcode 下载工具快照https://swift.org/download/#snapshots并安装 打开xcode并选择Xcode-> Toolchains-> Swift开发快照 选择目标->运行->我的Mac 现在打开浏览器,您可以看到结果 您可以看到路线文件并对此进行编码 get(“ hello”,“:name”){req入口名称= req.parameters [“ name”] ?. stringreturn“ Hello \(name!)!”}} 现在..如果您想更改端口,请转到server.json文件 继续…..

将视图模型建模为函数

注意:本文假设您了解RxSwift的基础知识或对MVVM有了一般的了解。 如果您不这样做,Internet上有大量令人难以置信的资源(包括下面链接的资源)可以帮助您入门。 另一个注意事项: Point-Free的 Brandon Williams 和 Stephen Celis 最初对这个想法睁开了眼睛 。 如果您尚未签出,则应该这样做。 他们发布的内容对于Swift开发人员来说绝对是必不可少的,订阅可能是您今年做出的最有价值的投资。 介绍 关于如何将RxSwift与MVVM配对,已经写了成千上万的单词,并进行了数小时的讨论。 在Grailed,我们一直热衷于与社区进行创新,以改善我们的代码并为我们的消费者创造更好,更可靠的产品。 出于这个目标,我们一直在使用一种MVVM形式,该形式通过函数式编程和RxSwift来提供可靠性,可测试性和稳定性。 我们喜欢它的许多方面,但是遇到了大多数MVVM开发人员都会熟悉的一系列问题。 问题所在 有时可能不清楚如何组织代码。 在互联网上漂浮的数十种MVVM变体中,每个视图似乎对视图层如何与其视图模型进行交互都有不同的看法。 缺少清晰的模式可能会使MVVM中的开发感到特别和不一致,从而可能导致可维护性问题。 视图模型也可能变得非常冗长。 由于许多版本的MVVM中缺乏结构,其他人选择为视图模型编写更为明确的输入和输出合同,但传统上这是以大量的样板为代价的。 同时,其他版本也不能防止视图模型的使用者错误地使用其API。 从视图层订阅视图模型的输入众所周知是一种反模式,但这是我在多个生产代码库中看到的。 理想情况下,编译器将阻止我们完全犯此错误。 由于Swift的类和结构初始化规则,视图模型也可能变得难以设置。 例如,当您必须将输出Observable设置为类或结构的属性时,这些输出取决于输入Subject 。 有时您会遇到这样的情况:在完成所有属性的初始化之前,您不能引用self ,但是由于需要引用self ,因此无法初始化属性。 忘记绑定视图模型的输入或输出也很容易,而且编译器在做错事情时也不会帮助我们找出问题。 编译器是我们的朋友,如果它可以帮助我们,那就太好了,这样我们就不会犯这种愚蠢的错误。 一种解决方案 现在,我们已经解决了RxSwift带来的MVVM的一些痛点,让我们以一个流行的MVVM风格编写一个简单的代码示例,并研究如何改进它。 所有笔触的开发人员都知道,编写纯函数可以解锁可测试性和可理解性的级别,否则,即使不是不可能,也很难实现。 问题在于我们编写的许多类型的代码无法完全适合纯函数,因此我们努力为尽可能多的模型建模纯函数。 这种见解驱使许多MVVM开发人员创建他们的视图模型,以具有一组明确的输入和输出,以便我们可以更类似于功能地对待它们。 输入是函数调用或Subject ,输出是回调,可变变量或Observable ,并且视图的业务逻辑在视图模型内部建模为输入到输出的转换,主要是在视图模型的初始化程序中。 Kickstarter开源应用可能是第一个,也是最知名的迭代。 尽管它是用ReactiveSwift编写的,但它们的想法几乎是相同的。 这个开源的应用程序使许多开发人员(包括我自己)对我们如何使用MVVM实现应用程序的可测试性和稳定性打开了眼睛。 让我们以经典的RxSwift为例,使用用户名和密码字段以及登录按钮的简单登录表单。 我们只希望在用户名和密码均填写后才启用该按钮,并且当用户单击该按钮时,我们希望显示一些有关其成功登录的消息(我们将在此处对其进行硬编码,在以后的文章中将详细介绍如何处理网络)。 这是一个示例,说明如果遵循Kickstarter应用程序中列出的模式,该如何编写。 如此小的屏幕在这里有很多事情要做,所以花一点时间来消化它。 我非常喜欢这种风格的几件事: 视图模型创建了一个非常明确的契约,关于它的功能以及应如何使用它 很少有错误使用视图模型API的方法 视图模型没有副作用 从外部查看此视图​​模型并了​​解如何对其进行测试非常容易 […]

可选的ve解包

Merhaba sevgili TurkishKitokuyucaları。 👋🏼Bugünkükonumuzda kod yazarkensüreklikarşımızaçıkan(!)ve(?) 哈迪başlayalım! 可选的Nedir吗? Birçokyazılımdilini birbirindenfarklıkılanbir yan bulunur。 Swift dilinidiğerdillerdeneşsizkılanözelliklerdenbiri de“ Optional”kavramı。 Swift dilindedeğişkenve sabitler可选olaraktanımlanabilir。 可选的KavramınaNedenİhtiyaçDuyarız吗? Swift dilinde sabit vedeğişkenleri可选olaraktanımlayabileceğimizdenbahsettik。 您可以在互联网上下载互联网,也可以在其他网站上随意选择。 Çénükü互联网ten veri gelipgelmeyeceğinibilemeyiz。 Daha Basit Bir Dil ileAnlayalım Örnek1 —Önümüzdebir kutu var。 Bu kutununiçinidoldurabileceğimizgibiboşdabırakabiliriz。 Bu tamamen bizimseçimimizdir。 Örnek2-比兹·比尔·库图·盖蒂尔迪 Bu kutununiçiboşya da dolu olabilir。 Bu tamamenkarşıtarafınseçimidir。 可选的DeğişkenTanımlama Xcode’dan yeni bir游乐场Projesiaçabilirsiniz。 照片:gibitanımlıyoruz: […]

在Swift中解析JSON的正确方法

解析JSON的正确方法是使用Codable。 但是Codable的问题在于,如果您有嵌套的JSON,则必须编写额外的Codable结构或编写自定义初始化程序。 这就是为什么许多开发人员选择使用诸如SwiftyJSON之类的第三方解决方案的原因。 但这就是失败的道路。 让我们对其进行修复,并结合SwiftyJSON和Codable的最佳部分来制作下一个JSON解析库。 这个主意 有两种从JSON解析嵌套结构的方法:创建额外的Codable结构或创建自定义初始化程序。 让我们考虑一下如何实现两者的自动化。 第一种方法可以通过代码生成实现自动化。 但是要获得它,要花很多时间才能使它起作用,并且您必须具有一些JSON的形式化描述。 让我们仔细看看创建自定义初始化程序的第二种方法。 简要地说,我们必须描述每个嵌套级别的编码键。 然后,我们可以使用这些编码键来创建嵌套容器。 看一下示例JSON: 让json = [ “容器”: [ “对象”:[ “名称”:“阿纳金·天行者”, “ alias”:“ Darth Vader”, “职业”:“西斯黑暗之王”, “年龄”:42岁 ] ] ] 让jsonData =尝试JSONSerialization.data(withJSONObject:json,选项:[]) 为了解析它,我们必须创建一个包含额外编码键的结构: struct Human:可编码{ 命名:字符串 让别名:字符串 让职业:字符串 年龄:整数 枚举ContainerKeys:字符串,CodingKey { 箱子容器 } 枚举ObjectKeys:字符串,CodingKey { 案例对象 } public init(来自解码器:Decoder)抛出{ 让容器=尝试解码器。容器( keyedBy:ContainerKeys.self ) 让嵌套=尝试container.nestedContainer( keyedBy:ObjectKeys.self, forKey:.container […]

使用Vapor和Fluent创建REST API

斯威夫特很棒。 是的,它已经成熟(现在有了5.0,我们有了ABI稳定性,万岁!)。 您拥有OOP,POP,功能和命令式编程的强大功能。 如今,您几乎可以在Swift中做任何事情。 如果您想成为既了解后端又了解前端的全栈开发人员,那么本文适合您。 用Swift编写的最著名的Web框架是Kitura和Vapor。 Vapor现在是第3版(于2018年5月发布),是开源的,您可以轻松创建REST API,Web应用程序或很棒的网站。 在本教程中,您将学习: 如何开始使用蒸气 创建您的第一个REST API 如何使用Fluent ORM Framework 如何在Fluent中将1:M和M:M db关系转换为父子或兄弟姐妹关系 将您所学的内容应用到真实的案例中 如果要跳过这一部分,可以在GitHub上找到整个项目: radude89 / footballgather-ws 通过在GitHub上创建一个帐户为radude89 / footballgather-ws开发做出贡献。 github.com 先决条件 对于本教程,您将需要: Xcode 10.2 迅捷知识 REST API的基础知识 Swift Package Manager的一些知识 入门 首先,您需要从Mac App Store安装Xcode。 您可以使用brew安装Vapor Toolbox。 这很有用,因此我们可以为常见操作运行命令行任务。 /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)” 冲泡水龙头/自来水 冲泡安装蒸气/抽头/蒸气 您准备好出发了! 足球聚会-iOS应用示例 FootballGather是一个演示项目,供朋友们聚在一起并尽可能快地参加足球比赛。 您可以通过查看以下样机(用Balsamiq创建)来想象客户端应用程序: 特征: […]

Swift-将枚举用作工厂

不飞溅是关于照片的全部。 您可以搜索照片,查看新照片,查看集合中的照片,查看摄影师的照片,查看用户喜欢的照片… 来自不同来源的照片列表都是一样的。 在iOS应用中,我使用了辉煌的Swift enum作为工厂来生成请求和数据源。 等一下,是一英镑。 网络要求 以下是从API检索照片的一些方法: 新照片 搜索 收藏的照片 用户的照片 用户的喜欢的照片 所有这些端点都返回带有分页的照片列表。 为了处理分页,我遵循了CloudKit中使用的游标概念。 对CloudKit进行分页查询时,它将返回CKQueryOperation.Cursor对象,可用于初始化下一页的查询。 这是一个不透明的对象,我不知道它拥有什么属性,但是我喜欢这个概念。 这是我在iOS应用中创建的游标类型: parameters属性会传递一些特定于端点的参数,例如排序顺序,集合ID,搜索查询… 游标与以下PagedRequest协议一起使用: 每个分页的API端点都有一个对应的Request对象,该对象遵循PagedRequest协议,因此这些对象使用游标初始化,并可以为下一页生成游标。 它们还具有生成其初始光标的类函数。 例如,这是搜索的对象: 数据来源 显示照片的视图控制器使用DataSource对象,该对象利用了这些分页的请求。 使用支持以下协议的工厂对象初始化数据源: DataSource使用该工厂对象来获取请求对象,并执行它们以从API中检索照片。 它不知道照片是否来自搜索,收藏,用户喜欢…… 该工厂 这是the的东西。 该应用程序将enum用作支持RequestFactory协议的工厂。 看起来像这样: 可是等等! 还有更多! 枚举还生成DataSource对象。 回顾一下,工厂产生了三件事: 分页的初始光标 要求 数据源 最后,懒惰 该应用程序使用单个PhotosViewController来显示照片,无论它们来自什么API终结点。 以下是创建显示搜索照片的视图控制器的方法:

天哪,Codable太棒了

在上一篇文章中,我用滚动视图描述了我的短暂尝试,其中包括以下部分: 为了帮助您了解所见,我在Intertubes上寻找了引人注目的数据馈送示例,并最终选择了USGS地震馈送。 只是。 因为。 为了整理提要,我认为我可以快速给新的Swift Codable协议打转,那时候我就知道了Frickin 很棒的 Codable是什么。 但这是下一篇文章。 抓紧。 您现在可以停止收紧。 这是那篇文章 。 我们将深入研究Xcode 9和Swift 4的Codable功能。 我们将从我在滚动视图文章中提到的GeoJSON feed示例开始,然后使用RolePlayingCore Github存储库更深入地研究更多示例。 首先:简单地遵循Codable 我从一个仅包含几个项目的基本结构开始,然后迅速使用嵌套结构和枚举来构建它。 GeoJSON提要足够简单( 请参阅此处的链接 ),Swift提供的自动生成的构造函数和编码键非常有用。 我总结了一下,涵盖了大约一半的属性,大部分是有趣的属性: 现在,我没有尝试解决使用JSON可能引起的一些棘手的问题。 但这主要是因为该示例不需要它,无论如何,我花更多的真实代码(例如RolePlayingCore GitHub存储库)来揭示有关Codable的更深层真相的旅程很快就会花光。 “所有软件在编写后即会成为旧版。”-实用程序设计师Andrew Hunt和David Thomas 好的, 很好 。 那也不是真实的代码,但是由于我已经花了一些时间在JSON解码上,所以我在六个月的令人震惊的时间内建立了相当多的“旧版”代码,并且为后续工作提供了便利更深入到Codable。 所以。 CodingKeys,解码和编码,天哪! 当您必须处理带有下划线或空格,拼合或不拼合嵌套类型的名称,或转换非本地JSON类型(例如发给子级Date)的名称时 ,您突然不得不为Codables添加样板。 但是,这非常简单,我几乎想跳过它,并继续处理更棘手的问题。 但。 让我们。 让我们从使用序列化已经可以与JSON一起使用的现有类型开始。 所以。 假设某些D&D 类特征,我们可能具有: 注意TODO。 好。 呼吁采取行动! 为这项开源计划做出贡献! 帮助我致富! 帮助我舒适地退休! 好,好,回到现实… 相应的JSON格式可能如下所示: 在Swift […]

更改颜色和形状ft。《惊奇队长》

其实一开始刚看看无限之战后,我一度犹豫看惊奇队长《惊奇队长》的,除非是复仇者被打得太惨了,另外因为惊奇队长的外表与造型我不行,加上网路两极的影评,不过就像《 Alita》好坏应该还是要你自己去证明它,毕竟起源电影就是有身世解谜的感觉。 看完觉得很以女性的角度去拍,自我定义的探索,成长环境性别歧视的奋斗,对女性至高无上博士的开始,当与最高情报对战时把脖子上的贴纸拿掉的时候,我仿佛看到标签上写的字是-女人,是容易很刻意,但看得很爽。 不过惊奇队长最后以一挡百的超能力真的让我太惊奇也太惊吓了,惊奇到我觉得太跳跃,太虎烂…可怜前面Jude Low饰演的Yon-Roggsh被铺得这么好…。 另外值得一提就是整部片的音乐就是非常90的庞克摇滚,一听到大学时期喜欢的Garbage女主唱的“ Only Happy When It Rains”,我的拳头都硬了…(跟船长Marvel一样) 这次的目标是画惊奇队长身后那个像枫叶的八芒星标志和上霓虹色,这个概念的发想是片中小女孩为惊奇队长换掉克里人的军服,按着按钮选了各种配色,最后是惊奇队长身上的件。 使用Geogebra GeoGebra | 免费的数学应用程序–全球超过1亿学生和教师使用 获取免费的在线数学工具,用于图形,几何,3D等! www.geogebra.org 2.一半对衬的写法 从程式制作国旗—利用游乐场画画加拿大国旗 这次的作业是利用程式来画出国旗,我挑选了加拿大国旗来做练习 medium.com 一开始使用Geogebra找座标时时,以左下为(0,0),并且按照iPhone8的大小设图大小为375 * 664 然后star View的裁切图就跑到下面,我想了老半天,啊,iPhone的(0,0)在左上!,不管负值,key正数就对了。 //星星座标 var starPointA = CGPoint(x:200,y:0) var starPointB = CGPoint(x:107,y:160) var starPointC = CGPoint(x:25,y:143) var starPointD = CGPoint(x:43,y:235) var starPointE = CGPoint(x:-56,y:286) var starPointF = CGPoint(x:52,y:342) var starPointG = […]