Tag: swift

iOS GCD —并发和线程

,로,글입니다。 。다있습니。 GCD的并发性和线程化。 스레드(thread)프로그램내에서내에서세다말한다。다。 만로한그램은스그램은가지있지만,만로그램이둘스상의있다。 이멀티멀티 스멀티 (多线程)한다。 主线程(UI)和后台线程,以及Apple的Grand Central Dispatch(GCD)和 NSOperatin Queue的产品。 이는thread를관리해야하는해준다。 已在GCD上添加了任务,然后在GCD上添加了GCD。 并发性。 。다수의이실행되는다。 프로세스나리어플이션은상의상의이그스상의가진다。 OS调度程序,然后单击“计划”。 使用时间片 ,使用并行处理。 능가능 race이race(比赛条件)방지 느림(모든이그이작업이끝나길기렸다렸기되) 并发队列。 。이순서대로실행됨을보장하지만이끝나는다없다。 불가불 빠름 들어,용자의사를를다고때다고할지할지않다않다。 。다。 并发队列。 할때는지를로순서가중요하다고串行队列를를다 GCD세가지메인공한공한공한공한공한.。 主队列 : 主线程 동작하며 串行队列 이다。 让mainQueue = DispatchQueue.main 2.全局队列 : 并行队列 이다。 高,默认,低,背景。 QOS(Quality of Service)类의로퍼티를지정정다。 GCD相片和影片。 let backgroundQueue = DispatchQueue.global(qos:DispatchQoS.QoSClass.background) […]

具有不同行为的协议扩展

如您所知,您可以在该协议的扩展名中为协议方法提供默认实现。 但是,当您决定在协议中声明该方法或将其忽略时,您是否知道其中的含义? 我们将研究差异。 让我们从默认情况下不会发出声音的动物的协议定义开始。 协议动物{ func makeSound() } 扩展名动物{ func makeSound(){ 打印(“ [silence …]”) } } 然后,我们创建两个符合此协议Animal的对象Cat和Dog 。 他们俩都可以发出自己的声音: 猫:动物{ func makeSound(){ 打印(“喵!”) } } 狗类:动物{ func makeSound(){ 打印(“糟糕!”) } } 如果我们想创建动物的集合并想让它们全部说出来,我们可以创建一个像这样的数组: 让animal1 = Cat() 让animal2 = Dog() 让动物:[动物] = [动物1,动物2] 然后,我们可以遍历动物,让它们发出声音: 用于动物{ animal.makeSound() } 那么输出是什么? 是的…它将是喵! 和Wo! 但是,如果我们没有在协议中声明方法但保留默认实现,将会发生什么? 协议动物{} 扩展名动物{ func makeSound(){ 打印(“ [silence […]

IOS面试常见问题解答(2018年8月)第4部分

本文结束了本月的问题,下个月将有更多新问题。 Q1。 下面的代码片段是否正确并且不会产生编译器错误? 在B类中进行覆盖时,是否需要删除class关键字? 解决方案 : 是的,它是正确的并且可以正确编译,如果您在类B中的重写功能中删除了类关键字,则会抛出错误。 Q2。 在以下片段中,有两种情况 一种。 如果在func转换之前添加class关键字该怎么办呢?这意味着什么,它将进行编译? b。 如果在func转换之前添加static关键字该怎么办呢。这意味着什么,它将进行编译? 解决方案 : 一种。 它将给出编译时错误 b。 它将完美编译 下一个问题涵盖了什么意思。 Q3。 Swift中的静态函数和类函数有什么区别? 解决方案 :结构和枚举的静态函数,以及用于类的类 其他一些区别是类函数是动态调度的,并且可以被子类覆盖。 Q4。 什么是“仅类协议”,您可以为其编写代码吗? 解决方案 :通过将AnyObject协议添加到协议的继承列表中,可以将协议采用限制为类类型(而不是结构或枚举)。 Q4。 编写通用Singelton类? 解决方案:符合Initializable协议的类在整个生命周期中将只有一个实例。 用例: 希望你喜欢这个解释。 如有其他疑问,请访问-iOS专家系列或访谈系列 解决方案 :是否简单地将static用于结构和枚举,协议和类的静态函数? 那是主要的区别。 其他一些区别是类函数是动态调度的,并且可以被子类覆盖。

如何从头开始创建iTunes Samples Player? (第2部分)

注意:这是“如何从头开始创建iTunes Samples Player? (第1部分)”。 此部分根据应用程序的功能分为两部分。 能够执行搜索并将结果显示为列表。 能够下载示例歌曲并播放。 为了实现这个目标,我们需要完成以下任务。 在搜索栏上输入搜索关键字后,知道何时点击“搜索”按钮。 根据搜索关键字启动“ URLSessionDataTask”。 响应到来后,解析它并将其转换为字典。 使用字典填充tableView。 解决方案1.1 :创建“ SearchViewController”的扩展名,以使该扩展名充当搜索栏的委托。 选择“添加新文件”选项,然后选择“快速”文件。 将其命名为“ SearchViewController + SearchBarDelegate”。 该代码的第一个版本如下所示: 解决方案1.2。 我们需要创建一个新的swift类,该类将启动URLSessionDataTask,解析响应数据,然后根据解析的数据创建模型对象的集合。 一旦成功完成,该模型将被传递给View,以填充tableView。 这也意味着我们需要在项目中添加一个模型类以保存跟踪信息。 该类看起来像下面的那个。 将其添加到“模型”组下的项目中。 SearchViewController将如下所示: 该版本的源代码在GitHub中。 下一个目标是实际下载声音文件,然后在选择行时播放它。 让我们清理TrackCell中的configure方法,以便隐藏“暂停”按钮,“取消”按钮,ProgressView和“进度”标签。 我们稍后将取消隐藏它们。 让我们看看如何实现下载机制。 以下是高级任务: 2.1 —单击下载按钮后,应用程序应找到必须从中下载文件的URL,然后开始下载。 2.2 —下载结束后,应使用文件在本地可用的事实来更新模型对象。 另外,下载按钮应该被隐藏。 2.3 —如果在下载完成后用户点击该行,则应播放该文件。 2.1的解决方案:下载按钮位于单元格上。 这意味着我们需要使用委托模式来处理下载按钮的点击。 我们将在TrackCell中定义一个协议,并在其中声明一个委托变量。 在TrackCell中编辑代码,以包括协议定义和委托变量。 同样,当点击“下载”按钮时,必须有一个被调用的函数。 现在,我们将在’SearchViewController’上有一个新扩展,它将作为TrackCell的委托。 首先,将只有一个委托方法触发下载。 但是,随着时间的流逝,我们那里将有更多的方法。 将其命名为“ SearchViewController + TrackCellDelegate” 下一步是向Networking组添加一个新类,该类负责文件下载过程。 […]

Swift 4中的iOS UIKit:显示UIActivityIndi​​cator

预习 资源 项目 https://github.com/calmone/iOS-UIKit-component 参考 UIActivityIndi​​catorView https://developer.apple.com/reference/uikit/uiactivityindicatorview 快乐编码😄

Swift 4中的iOS UIKit:具有UIImage的图像透明度

预习 资源 项目 https://github.com/calmone/iOS-UIKit-component 参考 UIImage https://developer.apple.com/reference/uikit/uiimage 快乐编码😄

iOS开发摘要-1

,давнособираюдлясебявсякиеполезныессылки,которыемогутпригодитсявгребле。 Вотподумалось,чегобынеподелитьсясхорошимилюдьми。 Аroot的rootViewController вастовозникаетнеобходимостьзаменитьодинстекконтроллеровнадругой。 Нунапример,онбордингзакончился->начинаемлогинфлоу,посленегопоказываемглавныйэкранприло。 请参见, 导航控制器和setViewControllers。 。такиделалнапрошломпроекте。 Новосссылкенижекамрадпредлагаетальтернативноерешение— rootViewController和UIWindow 。 Простоиэлегантно,дажеобидночточтосамнедодумался) 动画UIWindow的rootViewController过渡–丹尼尔·马古蒂(Daniele Margutti) 有时在应用程序的生命周期中,您可能需要更改主代码; 一个典型的案例也许是…… danielemargutti.com 迅捷游戏Новыефичисловарей Добрыедядьки-разработчикипрекрасногоязыкаSwiftсделалиегоещёлучше,добавивмногоништяковдля 字典 &。 Swift 4.0中的字典和集合改进 在最新版本的Swift中,字典和集合获得了许多新的方法和初始化方法,这些方法和初始化方法变得很普遍…… swift.org Гmap 值 выглядятпростопрекрасно,помоему。 Даиостальноеничего。 Кстати,кандидатуназаметку。 “обязательноспрашиваюнасобеседованиях“чтопоявилосьвновомсвифте”。 Иногдаспрашиваюточечнооконкретныхфичах。 Судяпоответам,вышесодержатсявысшие,сакральныезнанияабсолютнонеизвестныерядовому。 Делаемвыводы。 Пятьминутначтениеитывследующейлиге。 iOS + TensorFlow + CoreML 具有Core ML和TensorFlow的iOS 11中的智能手势识别 在第1部分中,我展示了如何使用深度学习来识别复杂的手势,例如心形,复选标记或快乐…… hackernoon.com Какпомне,потрясающийматериал。 在CoreML上进行操作。 Некогда,надопилитьтаскивджиреименятьцветакнопочек。 Потомувсянадежданатрушныхгиков,которымневломкодитьпоночам。 Статьяпоссылкевышеоднаизпервыхласточекнаэтутему。 Идеявследующем。 Пишемпрогунателефон,котораясобираетвсякиежесты(крестикитам,сердечки)。 Скриптнапистоне,чтобыобучитьмодельку(авториспользуетправославныйTensorFlow,хотяэтонеобязат ФинальноеiOSприложение,котороеумеетреагироватьнетольконастандартные轻按,滑动,pinc和аинассекуюфиг Понятно,чтонемногонадумано,нотутважнаидея。 […]

UIButton

Merhabalar,BugünküyazımdabiröncekiyazıdabaşlamışolduğumSwift ile UIKit serisine devamedeceğiz。 Biröncekiyazıyıokumadıysanızyazıyaaşağıdanulaşabilirsiniz: 迅捷的UIKit UILabel Bugünküyazımile sizlerle yepyeni bir seriyebaşlayacağız。 iOSdünyasındaprojelergeliştirirkenkullandığımızbirçok… medium.com Bugünkükonumuz ise UIButton。 Hazırsanızbaşlayalım🙂 UIButton,可扩展性,可扩展性,可扩展性和可扩展性。 巴尼尔(GenelBakış) 比尔·布顿(Bir buton),《德国人报》(kensinebağlıeylemlerigerçekleşitirir)。 Butonlarıngörünümütamamenözelleştirilebilir。 Arkaplan rengini,yazıfontunu veyabaşlıkrenginideğiştirerekuygulamanızın普通tasarımınauyacak butonlar tasarlayabilirsiniz。 Bir butonuarayüzünüzekod ile veya接口生成器aracılığıylaekleyebilirsiniz。 目标行动tasarımmodelinikullanır。 Bir butonaikifarklıyöntemile aksiyonbağlanabilir; 标签addTarget(_:action:for:) addTarget addTarget(_:action:for:) yöntemiile butonunuza kod ile aksiyonbağlayabilirsiniz IBAction:界面生成器IBAction。 比尔·阿克西永(Bir aksiyon),比尔·丹尼斯·丹尼斯(saine ship)olabilir。 @IBAction函数islemYap() @IBAction func islemYap(发送者:UIButton) @IBAction函数islemYap(发送方:UIButton,forEvent事件:UIEvent) Butonlarıngörünümlerinitanımlayan与farklıdurumvardır。 […]

Swift中的面向铁路的编程

在本文中,我们将讨论处理函数执行的两个轨道:快乐路径和错误路径。 几乎每个编程任务都由两个用户的轨迹或路径组成。 当一切顺利时,我们称其为“幸福之路”。 但是每次发生某些事情时,尤其是在移动应用程序中。 验证错误,互联网消失,系统杀死我们的应用程序,硬件报告错误,服务器不可用等。 通常,错误路径需要付出更大的努力。 我们应该以某种方式处理所有预期的和意外的错误。 铁路定向编程(ROP)可以帮助我们完成此例程。 该术语的最初发明者是Scott Wlaschin。 他是https://fsharpforfunandprofit.com/的创建者,并且是《 Domain Modeling Made Functional》一书的作者(强烈推荐给所有人)。 在他很少使用F#语言讨论ROP之后,许多社区开始对所有其他语言(而不仅仅是功能语言)采用这种方法。 现在,我想展示一下我们如何在Swift中做到这一点。 让我们从问题开始。 假设我们有一项添加基本用户注册功能的任务。 用户必须提供电子邮件和密码,它们必须有效,并且系统中不应有任何重复的电子邮件。 好的,让我们为注册功能建模。 我们为输入数据和用户创建简单的结构。 CustomDebugStringConvertible协议将有助于打印输出,而UserError枚举描述了注册过程中所有预期的和意外的错误。 这非常简单明了,让我们继续。 验证之后,我们希望将用户保存到数据库或将其发布到Web服务。 再次,为简单起见,我决定使用一个模拟保存到数据库的函数。 在saveToDb(_ 🙂函数中,我们尝试创建新用户并将其放入商店,并在发现重复的情况下引发错误。 好,准备完毕。 现在让我们做第一个尝试编写寄存器功能的尝试。 首先,让我们看一下签名(UserInput)引发-> User。 我们希望接收输入并返回一个新用户。 但是我们也想以某种方式返回所有可能的错误。 一种方法是抛出错误 。 但是通常抛出错误意味着意想不到的事情刚刚发生。 我们期望电子邮件可能无效吗? 是。 我们期望密码可能无效吗? 是。 我们是否期望可能已经存在具有相同电子邮件的用户。 是。 那么,为什么不只将用户和预期错误之一一起返回呢? 人们称这种类型为元组。 Swift可能支持元组。 新的签名是(UserInput)->(User ?, UserError?) 更好,但是现在我们必须对User和UserError使用Optionals 。 这是因为我们可以返回用户或错误,但不能同时返回两者。 熟悉函数式编程的人可以说:“我们在这里需要求和类型!”。 他们将是正确的。 而且我们不必发明新的东西,为此已经存在良好的抽象。 […]

我们正在招聘iOS开发人员

我们正在寻找一个热情,经验丰富的移动开发人员,他们在开发,部署和改进iOS应用方面拥有良好的往绩。 要申请此职位,请通过以下 网址 访问我们的招聘网站: https : //vester.workable.com/jobs/395666 难得的机会 这是加入创建团队加入斯堪的纳维亚半岛最令人兴奋的金融科技初创公司之一的难得机会。 Vester正在重新设计金融服务,以真正满足企业和人员的需求。 我们约有一半的客户将使用我们的iOS应用程序。 您的挑战将是从头开始创建我们市场上最好的iOS应用。 关于你 加入一家高成长的初创公司是一次非常艰苦的经历。 这份工作是非常有益的,但有时也要求很高。 除了您所需要的领域的详细信息,您还将在广泛的领域中做出贡献,例如最终用户需求和我们公司的战略目标; 与团队成员合作,弥合高可用性,强大的财务基础架构与令人愉悦的数字客户体验之间的差距; 并在一支多学科的国际团队中壮成长。 我们正在寻找有上进心和才华的人才。 加入我们,创建您一直希望加入的公司。 角色 我们正在寻找一个热情,经验丰富的移动开发人员,他们在开发,部署和改进iOS应用方面拥有良好的往绩。 您强烈相信本机的功能,并且对本机应用程序如何适应更大的方案有一定的了解。 职责范围 为iOS创建可扩展,美观且安全的数字产品。 务实,高效,但要注意真正重要的细节。 架构,开发,测试和部署到应用商店。 维护并分享有关iOS最佳实践和标准的深入知识。 在架构和设计讨论中为您的队友提供支持。 与我们的UX设计人员合作,为平台和生态系统中的可能性提供指导。 参与社区,分享您的出色工作。 资格 面向对象编程和专业软件开发的坚实基础 熟悉框架,标准和工具 多年使用Objective-C和/或Swift的经验 在应用商店中部署和管理应用的丰富经验 爱美丽的代码; 抛光让你开心 我们的技术栈 我们利用数字参与技术,机器学习和高级分析来使金融服务与网络经济相关。 我们使用的技术: 带有Swift和Objective-C的iOS,适用于Android的Java Apache Spark和Mahout Hadoop和HBASE 弹性搜索 Java,JavaScript,Ruby,Python。 微服务,REST API和Web服务 我们很想听听您最喜欢的框架/平台/工具是什么,以及为什么要使用它。 职位,福利和津贴 这是奥斯陆的全职职位。 计划在斯德哥尔摩,哥本哈根和伦敦设有办事处。 适用于合适候选人的重新安置软件包。 我们提供具有竞争力的一揽子计划,包括基本薪水,公司股权和成长中的初创公司可以负担的所有特权,包括无限期涵盖Coursera证书。 […]