Swift

Hire the Top 3% of 自由Swift开发者

Toptal是一个面向顶级Swift开发者的市场, engineers, programmers, coders, architects, and consultants. 顶级公司和初创公司可以聘请Toptal专职(全职), hourly, 或者兼职的Swift自由职业者,用于他们的关键任务软件项目.

无风险试用,满意才付款.

雇佣自由的Swift开发人员和工程师

Josip Petrić

自由Swift开发者

CroatiaToptal的自由Swift开发人员 Since July 25, 2016

作为一个有十多年经验的软件工程师, 约瑟普对建筑的可扩展性有着敏锐的认识, maintainable, 以及用户友好的应用程序. 他选择的平台是iOS,他已经为其设计和开发了广泛的应用程序, 从简单到复杂, 大规模的应用. 约瑟普是一个成熟的团队领导者和团队成员,具有模范的沟通和社交技巧.

Show More

Ryan Bradley Lons

自由Swift开发者

United StatesToptal的自由Swift开发人员 Since January 7, 2015

Ryan是一名高级iOS和网页开发人员,热衷于创造令人惊叹的用户界面和体验. 他在开发堆栈的任何地方工作都很舒服,并且有10多年的工作经验. He's well-spoken, 很容易沟通, quick to respond, 并且擅长为你面临的任何挑战找出最佳解决方案. 瑞安有创业的动力,也了解创业公司面临的挑战.

Show More

Josh Reynolds

自由Swift开发者

NetherlandsToptal的自由Swift开发人员 Since May 10, 2016

拥有超过15年的成功经验,在世界各地建立了伟大的数字产品, 乔希以同情心和榜样来领导. 他会在需要的时候与团队的其他成员一起跳进战壕,并带来清晰的战略,帮助我们安全地驾驭数字海洋的湍流. Josh选择的工具是证据,同理心,清晰而动态的沟通,以及成长的心态.

Show More

Andrej Adamcik

自由Swift开发者

SlovakiaToptal的自由Swift开发人员 Since January 27, 2015

Andrej是一位软件开发人员和架构师. 他有丰富的PHP经验, JavaScript, HTML, 和CSS,喜欢前端和后端工作. 他喜欢用Node创建现代网站和开发实时可扩展的web应用程序.js.

Show More

Rinat Sharipov

自由Swift开发者

United StatesToptal的自由Swift开发人员 Since October 16, 2013

Rinat是一位拥有超过10年iOS开发经验的iOS技术领导者. 他使用过基于rest的api, 社交媒体整合, geolocation, core animation, 完全控制定制. Rinat拥有强大的产品应用开发愿景.

Show More

Paul Young

自由Swift开发者

United StatesToptal的自由Swift开发人员 Since August 1, 2016

Paul作为一名专业的软件开发人员已经有30多年的经验了,主要是作为一名自由职业者,从事各种各样的项目,专注于原生移动iOS和Android应用程序的开发. 保罗勤奋,善于沟通,喜欢解决难题.

Show More

Oleksandr Malovichko

自由Swift开发者

GermanyToptal的自由Swift开发人员 Since June 1, 2017

Oleksandr是一名高级iOS工程师,在手机和平板设备的软件开发方面拥有多年经验. Oleksandr致力于不断发现, evaluating, 并实施新技术以最大限度地提高开发效率.

Show More

Darion Cassel

自由Swift开发者

United StatesToptal的自由Swift开发人员 Since January 8, 2016

Darion是一名研究科学家,正在攻读计算机工程博士学位,研究方向是安全. 他曾在顶级安全会议上发表论文,并拥有超过四年的JavaScript和Python应用程序开发经验. Darion曾为Facebook等组织工作, 开放科学中心, NASA, Rackspace, CommVault, 和百时美施贵宝, 并且有管理小型和大型团队的经验.

Show More

Zoltan Varadi

自由Swift开发者

HungaryToptal的自由Swift开发人员 Since October 29, 2015

作为一个用户体验爱好者, 佐尔坦作为一名工程师最大的优点是他精确的设计实现. 他积极的态度和开放的心态使他能够将最优质的项目带到生活中. Zoltan在维护客户关系和管理团队工作流程方面的经验帮助他为团队提供最佳的整体价值.

Show More

Sergey Dikovitsky

自由Swift开发者

BelarusToptal的自由Swift开发人员 Since March 5, 2018

谢尔盖是一名高级iOS开发人员,拥有四年多的软件开发经验,撰写可读性很强的文章, clean, 可维护的源代码. 他使用过各种技术栈:REST和套接字api, 社交媒体整合, geolocation, 音频/图像/视频处理, complex UI, 以及动画自定义.

Show More

Petru Gabriel Lupu

自由Swift开发者

SpainToptal的自由Swift开发人员 Since March 25, 2019

Petru是一名开发人员,他在移动行业工作了14年, 在App Store上发布了100多款应用. To any project, 他带来了对sdk /库和iOS硬件/软件的深入了解, 出色的OOP技能, solid Node.js知识,以及在移动应用中使用RESTful web服务的实践经验. 除了他的技术专长, 他对敏捷工作流程也很熟悉, working with Git, 并在团队环境中茁壮成长.

Show More

现在注册以查看更多资料.

Start Hiring
经常成对

获得额外的专业知识

我们的客户经常将这些额外的服务与我们的自由Swift开发人员配对.

A Hiring Guide

雇佣优秀的Swift开发人员指南

Swift是苹果公司开发的一种通用的、多范式的编译式编程语言. It is powerful, intuitive, 并适用于广泛的平台, 包括移动设备, watches, desktops, and the cloud. 由于开源,它迅速流行起来. Swift的代码简单、交互且有趣. 语法简洁而富有表现力,应用程序在设计上是安全的,运行速度非常快.

Read Hiring Guide

快速招聘资源

Trustpilot
THE TOPTAL ADVANTAGE

在无风险试用后,98%的Toptal客户选择雇用我们的人才.

Toptal的筛选和匹配过程确保卓越的人才与您的精确需求相匹配.

Start Hiring
Toptal in the press

... 允许公司快速组建具有特定项目所需技能的团队.

尽管对程序员的需求在不断增加,但Toptal对自己近乎常春藤联盟级别的审查感到自豪.

Our clients
为游戏制作应用程序
Conor Kenney
为游戏制作应用程序
构建一个跨平台的应用程序,在全球范围内使用
Thierry Jakicevic
构建一个跨平台的应用程序,在全球范围内使用
引领数字化转型
Elmar Platzer
引领数字化转型
挖掘实时数据将改变行业的游戏规则
挖掘实时数据将改变行业的游戏规则
我们的客户怎么想
Clients Rate Swift开发人员总数4.4 / 5.0截至2024年1月7日,平均有821条评论
Testimonials

没有Toptal就不会有Tripcents. Toptal Projects使我们能够与产品经理一起快速发展我们的基金会, lead developer, and senior designer. 在60多天的时间里,我们从概念到Alpha. 其速度、知识、专业知识和灵活性是首屈一指的. Toptal团队是tripcents的一部分,就像tripcents的任何内部团队成员一样. 他们像其他人一样贡献并拥有开发的所有权. 我们将继续使用Toptal. 作为一家初创公司,它们是我们的秘密武器.

Brantley Pace, CEO & Co-Founder

Tripcents

我对我们与Toptal的合作经验非常满意. 和我一起工作的专业人员在几个小时内就和我通了电话. 在和他讨论了我的项目后,我知道他就是我想要的候选人. 我立即雇用了他,他没有浪费时间就完成了我的项目, 甚至通过添加一些很棒的设计元素来增加我们的整体外观.

保罗·芬利,局长

K Dunn & Associates

与我合作的开发者都非常出色——聪明、有动力、反应灵敏. 过去很难找到高质量的工程师和顾问. Now it isn't.

Ryan Rockefeller, CEO

Radeeus

Toptal立即理解了我们的项目需求. 我们遇到了一位来自阿根廷的杰出自由职业者, from Day 1, 沉浸在我们的行业中, 与我们的团队无缝融合, understood our vision, 并产生了一流的结果. Toptal使与高级开发人员和程序员的联系变得非常容易.

Jason Kulik,联合创始人

ProHatch

作为一家资源有限的小公司,我们不能犯代价高昂的错误. Toptal为我们提供了一位经验丰富的程序员,他能够立即投入工作并开始做出贡献. 这是一次很棒的经历,我们会马上再来一次.

斯图尔特·波克尼校长

现场专用软件解决方案

我们使用Toptal聘请了一位具有丰富的Amazon Web Services经验的开发人员. 我们面试了四位候选人,其中一位非常符合我们的要求. 这个过程迅速而有效.

Abner Guzmán Rivera,首席技术官和首席科学家

Photo Kharma

Sergio是一个很棒的开发者. 一流,反应迅速,工作效率高.

Dennis Baldwin,首席技术专家和联合创始人

PriceBlink

和Marcin一起工作是一种乐趣. He is competent, professional, flexible, 并且非常迅速地理解需要什么以及如何实现它.

André Fischer, CTO

POSTIFY

我们需要一位能立即开始我们项目的专业工程师. 西马纳斯的工作超出了我们的预期. 不需要采访和追踪专家开发人员是一种非常节省时间的方法,并且让每个人都对我们选择切换平台以使用更健壮的语言感到更舒服. Toptal使这一过程变得简单方便. Toptal现在是我们寻求专家级帮助的首选之地.

Derek Minor, Web开发高级副总裁

Networld Media Group

Toptal的开发人员和架构师都非常专业,也很容易共事. 他们提供的解决方案价格合理,质量上乘,缩短了我们的发行时间. Thanks again, Toptal.

Jeremy Wessels, CEO

Kognosi

我们与Toptal合作非常愉快. 他们为我们的应用程序找到了完美的开发人员,让整个过程变得非常简单. 它也很容易超出最初的时间框架, 我们可以在整个项目中保持同一个承包商. 我们强烈推荐Toptal,因为它可以快速无缝地找到高素质的人才.

Ryan Morrissey, CTO

应用商业技术有限责任公司

我对Toptal印象深刻. 我们的开发人员每天都和我交流,他是一个非常强大的程序员. 他是一个真正的专业人士,他的工作非常出色. 5 stars for Toptal.

Pietro Casoar, CEO

Ronin Play Pty Ltd

与Toptal合作是一次很棒的经历. Prior to using them, 我花了相当多的时间面试其他自由职业者,但没有找到我需要的. 在与Toptal合作后,他们在几天内就为我找到了合适的开发者. 与我一起工作的开发人员不仅提供高质量的代码, 但他也提出了一些我没有想到的建议. 我很清楚,阿莫里知道自己在做什么. Highly recommended!

George Cheng, CEO

Bulavard, Inc.

作为一名Toptal合格的前端开发人员,我还经营着自己的咨询业务. 当客户来找我帮忙填补他们团队中的关键角色时, Toptal是我唯一愿意推荐的地方. Toptal的所有候选人都是精英中的精英. Toptal是我在近5年的专业在线工作中发现的性价比最高的网站.

Ethan Brooks, CTO

Langlotz Patent & Trademark Works, Inc.

在希格尔的早期, 我们需要一流的开发者, at affordable rates, in a timely fashion. Toptal delivered!

Lara Aldag, CEO

Higgle

Toptal能让你轻松找到合适的人选,让你放心,因为他们有能力. 我肯定会向任何寻找高技能开发人员的人推荐他们的服务.

Michael Gluckman,数据经理

Mxit

Toptal将我们的项目与最优秀的开发人员快速匹配的能力非常出色. 开发人员已经成为我们团队的一部分, 我对他们每个人所表现出的敬业精神感到惊讶. 对于那些希望与最好的工程师远程工作的人来说,没有比Toptal更好的了.

劳伦特·阿里,创始人

Livepress

Toptal让寻找合格的工程师变得轻而易举. 我们需要一个有经验的ASP.. NET MVC架构来指导我们的启动应用程序的开发, Toptal在不到一周的时间里为我们找到了三位优秀的候选人. 在做出我们的选择后,工程师立即在线并开始工作. 这比我们自己发现和审查候选人要快得多,也容易得多.

Jeff Kelly,联合创始人

Concerted Solutions

我们需要一些Scala的短期工作,Toptal在24小时内为我们找到了一位优秀的开发人员. 这在其他平台上是不可能实现的.

Franco Arda,联合创始人

WhatAdsWork.com

Toptal为快速发展和规模化的企业提供不妥协的解决方案. 我们通过Toptal签约的每一位工程师都迅速融入了我们的团队,并在保持惊人的开发速度的同时,将他们的工作保持在最高的质量标准.

Greg Kimball,联合创始人

nifti.com

如何通过Toptal招聘Swift开发人员

1

与我们的行业专家交谈

Toptal的工程总监将与您一起了解您的目标, technical needs, and team dynamics.
2

与精心挑选的人才一起工作

几天之内,我们将为您的项目介绍合适的Swift开发人员. 平均匹配时间在24小时以下.
3

绝对合适

与你的新Swift开发人员一起试用一段时间(满意才付费), 在订婚前确保他们是合适的人选.

寻找拥有相关技能的专家

在我们的人才网络中访问大量熟练的开发人员,并在48小时内雇用最优秀的3%.

FAQs

  • Toptal Swift开发者有何不同?

    At Toptal, 我们对Swift开发人员进行了彻底的筛选,以确保我们只为您匹配最优秀的人才. Of the more than 200,每年有5000人申请加入Toptal网络, 只有不到3%的人能达标. 你将与工程专家(而不是一般的招聘人员或人力资源代表)一起了解你的目标, technical needs, and team dynamics. 最终的结果是:经过专家审查的人才从我们的网络,定制匹配,以满足您的业务需求.

  • 我可以在48小时内通过Toptal雇佣Swift开发人员吗?

    取决于可用性和进度, 你可以在注册后48小时内开始与Swift开发人员合作.

  • Toptal Swift开发者的无风险试用期是多长?

    我们确保您和您的Swift开发人员之间的每次约定都从长达两周的试用期开始. 这意味着你有时间确认订婚是否成功. 如果你对结果完全满意, 我们会给你开时间单的,你愿意多久我们就多久. 如果您不完全满意,我们不会向您收费. From there, 我们要么分道扬镳, 或者我们可以为您提供另一位可能更合适的专家,我们将与他开始第二轮谈判, no-risk trial.

Share
Swift

如何聘请优秀的Swift开发人员

The Challenge

自2014年推出Objective-C以来,Swift一直在努力超越它. 作为iOS应用宝座上Objective-C的继承者, 它拥有新一代编程语言应该具备的一切. 它直观、互动、安全、快捷、可靠、省时、免费. Swift是为ipad设计的, iPhones, 以及所有其他苹果设备,并与Cocoa和Cocoa Touch框架完全兼容.

Swift -一种语言可以统治所有语言

Swift -一种语言可以统治所有语言.

最初的策略是通过展示新语言的所有优点,让开发人员自己迁移到新语言. 然而,Swift的第一个版本相当不稳定,漏洞百出,并且不能与Xcode完全兼容.

转折点出现在2015年12月,当时苹果对其新生儿的强烈偏好通过将其开源来证明, 发布带有补丁和更新的新大版本. Swift 2已经足够稳定,可以在应用程序中安全使用, 从而确保了它作为watchOS首选语言的地位, tvOS, and iOS development.

尽管Swift的发展在两年前才出现, 目前已经有一个庞大的开发人员社区,他们被认为是这方面的专家. However, 开发者和优秀开发者的区别在于他们的适应能力, learn, 与世界其他地方保持同步. 因为斯威夫特面临着一个光明的未来, 而且每年肯定会有很多新的更新, 一个伟大的开发者必须始终站在进化曲线的顶端. 找到这样的人才并不是一件容易的事. So, 这篇文章提供了一些问题的样本,这些问题对于评估候选人对Swift掌握的广度和深度至关重要.

问题与答案

Q: Describe Swift. 这是一种什么样的语言啊? 它的主要福利是什么?

Swift是一种编译语言,其源代码被翻译成机器码. 它与它的前身Objective-C和苹果的Cocoa框架完全兼容. 通过开源语言, 苹果明确表示,Swift不仅仅是一种用于移动应用程序的语言. New frameworks, like Perfect这些都是Swift成为服务器端语言的第一次尝试. 这样一来,Swift开发人员和全栈开发人员将能够使用同一种语言创建客户端和服务器端应用程序.

以下是Swift的一些主要优势:

  • 可选类型,使应用程序抗崩溃
  • 内置错误处理
  • Closures
  • 比其他语言快得多
  • Type-safe language
  • 支持模式匹配

问:解释一下Swift编程中类和结构的主要区别.

类和结构是大多数编程语言的基本构建块. 然而,它们之间有区别. 为了在Swift中充分利用它们,我们需要了解它们提供的所有可能性. 有一些原则是每个开发者都应该知道并遵守的.

让我们从类和结构体共有的属性开始:

  • 两者都符合协议,将功能标准化,以达到特定的目的,即接口.
  • 两者都可以扩展其功能以添加额外的方法,而无需修改原始类或结构.

然而,比了解它们的共同点更重要的是了解它们的不同之处:

  • 类是引用类型——当它们被分配给不同的属性时,它们不会被复制, 当它们被传递给函数时也是如此.
  • 结构更快. 类实例在堆上分配,而结构实例在堆栈上分配.
  • 结构不支持继承.
  • 结构体为所有没有默认值的属性提供默认初始化式:
struct Person {
    let name: String
}

让patrik = Person(name: " patrik ")

let patrik2 = Person() //不编译,name属性需要一个值

问:解释Swift中的泛型.

复杂的应用程序需要没有任何重复的干净代码. 这里,泛型会派上用场,因为它们可以帮助我们避免不必要的重复. In general, 泛型被认为是Swift最复杂的特性之一, 而且应该尽可能多地使用它们. 它们使我们能够编写类和方法而不指定它们使用的类型. 只要有可能,Swift就会在内部使用泛型.

让我们看一下最好的例子之一,数组,因为它们可以存储任何类型. 在我们的例子中,我们将实现一个简单的数据结构, Queue,以演示泛型的强大和有用:

class Queue {
    
    private var data = [T]()
    
    函数enqueue(item: T) {
        data.append(item)
    }
    
    func dequeue() -> T? {
        return data.count == 0 ? nil : data.removeFirst()
    }
}

let q = Queue()

在这里,我们去掉了创建的需要 Queue 对于稍后将在应用程序中使用的其他类型. Our Queue 可以包含任何类型,我们可以在一个地方定义它吗. 它为我们节省了很多时间,否则我们会花在设置 Queue each time later.

Q: Explain the lazy keyword.

的初始值 lazy 仅在第一次调用存储属性时才计算存储属性. 有些情况下 lazy 房地产对开发商来说非常方便. 假设该属性需要相当长的初始化时间, 就像在实例化storyboard的控制器数组时 UIPageViewControllers.

类MyController: UIPageViewController {
    
    lazy var myControllers: [UIViewController] = {
        print(“初始化”)
        让storyboard = self.Storyboard else {return []}
        让controller1 = storyboard.instantiateViewControllerWithIdentifier(“管理员一”)
        让controller2 = storyboard.instantiateViewControllerWithIdentifier(“Controller2”)
        让controller3 = storyboard.instantiateViewControllerWithIdentifier(“Controller3”)
        返回[controller1, controller1, controller1]
    }()
    
    重载函数viewDidLoad() {
        super.viewDidLoad()
        
        let _ = myControllers
        let _ = myControllers
    }
}

在我们的例子中,我们调用 myControllers two times in viewDidLoad (这只是为了测试目的,看看初始化是如何工作的). Our lazy 变量包含一个print语句来演示底层发生的事情. 打了两次电话之后 let _ = myControllers,控制台日志中只有一条消息. 那是因为第二次 lazy 变量已经初始化,不需要再初始化一次.

问:讨论如何传递一个变量作为引用.

在开始讨论之前, 我们需要提到有两种类型的变量:引用类型和值类型. 这两种类型的区别在于,通过传递值类型, 该变量将创建其数据的副本, 而引用类型变量将只指向内存中的原始数据.

在Swift中,所有的类实例都是引用类型. 带有类对象的变量只是指向内存的指针. 这同样适用于作为参数的函数. Consider the example:

类A: CustomStringConvertible {
    var name = "Patrik"
    var description:字符串{
        return name
    }
}

函数changeName(对象:A) {
    object.name = "Thomas"
}

let myObject = A()
changeName(myObject)
print(myObject) //

Here, an instance myObject is passed to the changeName 函数,并且不需要将参数标记为引用类型. Instead, 我们只需要知道它们在与不同参数类型一起使用时的一些行为规则. In this case, the print(myObject) will write “Thomas”.

结构、数组、字符串和字典都是值类型. 为了达到类似的效果,将变量作为引用类型传递给函数,我们需要添加 inout 参数声明前的关键字和变量前的&号. 让我们考虑一个类似的例子:

函数changeFirstElement(输入输入:[Int]) {
    input[0] = 9
}

Var array = [1,2,3]
changeFirstElement(&array)
Print (array) // [9,2,3]

Q: Explain what defer 是,什么时候应该使用它.

斯威夫特2介绍了新的 defer 关键字,该关键字提供了当外部块即将完成时将执行的代码块. We could say that defer 块将在执行离开当前作用域的情况下执行. 考虑下面的代码,并尝试回答输出将是什么.

func write() {
    延迟{print("end")}
    Print ("start for loop")
    for i in 0...5 {
        print(i)
    }
}

如前所述, defer 块将在函数的末尾执行,即使它是在 write() function.

输出结果将是:

start loop
0
1
2
end

现在来看一个更复杂的例子:

func write() {
    延迟{print("end")}
    print("start loop")
    for i in 0...2 {
        print(i)
        Defer {print(" Defer ", i)}
    }
}

The output is:

start loop
0
defer  0
1
defer  1
2
defer  2
end

值得注意的是 defer 语句在每次循环迭代后执行. That’s because defer的父作用域是循环作用域.

Nesting defer block in if 语句也会做同样的事情 for loop.

函数write3(输入:Int) {
    if input > 0 {
        打印("数字大于零")
        Defer {print(" Defer positive")}
    }
    打印(“输入是”,输入)
}
write3(10)

The output is:

这个数大于零
defer positive
input is  10
这个数大于零
defer positive
input is  10

Using deferS可以显著地帮助程序员避免重复,但了解它是至关重要的 defer它的行为和执行时间. Simple print 函数可以验证开发人员是否理解问题.

问:为什么使用高阶函数更好? Explain with examples.

以另一个函数作为参数的函数, or return a function, as a result, 被称为高阶函数吗. Swift将这些函数定义为 CollectionType. 最基本的高阶函数是a filter. 它是数组上的一个函数,它接受另一个函数,该函数将用于返回数组的新过滤版本. 高级函数的主要目的是帮助我们在更短的时间内编写bug更少的代码. At first glance, 这些函数可能有点吓人, 但优秀的开发人员应该尽可能多地使用它们.

事实上,我们可以把一个函数放到另一个函数中,这样我们就可以把很多小函数组合成更大的函数. 如果我们意识到这一点,代码的可读性就会高得多.

假设我们有一个数字数组. 我们怎样才能只选择那些大于0的呢? 一个非常简单的方法是:

Let numbers = [- 10,4, - 3,5]
var positive = [Int]()
for n in numbers {
    if n > 0 {
        positive.append(n)
    }
}
Print (positive) // [4,5]

然而,用更优雅的方式编写更少的代码不是更好吗?

Let numbers = [- 10,4, - 3,5]
令正=数.filter { (value: Int) -> Bool in
    return value > 0
}
Print (positive) // [4,5]

在上面的代码示例中, filter 函数将遍历每个值, and for each value, 它将把它作为当前值传递给回调函数. 然后,回调函数将返回一个布尔值,以确定该值是否应该在输出数组中.

Swift通过推断其参数的类型和返回值的类型,使我们能够使用更短版本的闭包. As a result, 当函数作为参数直接传递时,不需要编写完整的声明.

Let numbers = [- 10,4, - 3,5]
令正=数.filter { $0 > 0 }
Print (positive) // [4,5]

Swift还提供 map 函数,它返回一个包含所有新映射值的新数组,并且只有一行代码.

Let numbers = [- 10,4, - 3,5]
let strings = numbers.map { String($0) }
Print (strings) // ["-10", "4", "-3", "5"]

要对数组中的所有值求和,有一个 reduce 高阶函数来帮助我们实现.

Let numbers = [- 10,4, - 3,5]
let sum = numbers.reduce(0) { $0 + $1 }
print(sum) // -4

问:对应用程序设置进行分组以使项目尽可能干净的最佳实践是什么?

每个项目都包含一些自定义设置,如API密钥,名称 NSUserDefault 键,或应用程序中使用的颜色的调色板. 小项目不需要任何精确的规则来正常工作. 我们可以简单地使用如下代码:

label.textColor = UIColor(红色:34/255,绿色:36.0/255,蓝色:38/255,alpha: 1)
NSUserDefaults.standardUserDefaults ().setBool(true, forKey: " istutorialshow ")

However, projects tend to grow, 应用程序的设计将会改变, 我们需要一个更好的系统来将“共享”数据集中在一个地方. 我们需要一种只改变一行代码的方法, 比如应用程序的颜色, 并在整个项目中恰当地传播.

有多种方法可以解决这个问题. 让我们来看看一个可能的解决方案:

struct Color {
    静态让appColor = UIColor(红色:34/255,绿色:36/255,蓝色:38/255,alpha: 1)
    静态让greyColor = UIColor(红色:131.8/255, green: 131.8/255, blue: 131.8/255, alpha: 1.0)
}

struct Settings {
    struct NSUserDefaults {
        让istutorialconfigured = " istutorialconfigured "
    }
    struct APIKey {
        静态let织物= "xxx"
    }
}

通过将相似的属性包装在一起, 我们可以显著减少bug, 比如使用相同的钥匙 NSUserDefaults 对于两个不同的属性. 此外,这种方式为我们提供了拼写检查,如果我们正确地编写了密钥. Also, 如果我们决定去掉一些键或颜色, 删除一行将告诉我们哪些文件使用了弃用的密钥. 在一个地方使用所有的钥匙有很多好处.

然而,我们知道创造 Color or Settings 结构在全局作用域级别并不是最好的方法, 因为它就像一个全局变量, 哪种做法不好. 我们应该将这些设置放入包装器中,然后将其与项目类型直接连接.

extension UIColor {
    struct MyProject {
        静态让appColor = UIColor(红色:34/255,绿色:36/255,蓝色:38/255,alpha: 1)
        静态让greyColor = UIColor(红色:130/255,绿色:130/255,蓝色:130/255,alpha: 1)
    }
}

扩展NSUserDefaults {
    struct MyProject {
        让istutorialconfigured = " istutorialconfigured "
    }
}

使用这些键的结果将是:

NSUserDefaults.standardUserDefaults ().setBool(true, forKey: NSUserDefaults.MyProject.isTutorialShown)
label.textColor = UIColor.MyProject.appColor

利用Swift扩展可以为我们提供一种复杂的方式来分组所有必要的设置,并使设计更简洁. 为所有扩展名创建一个单独的文件也是一个好主意, 然后,我们将得到设计更改比通过每个文件和手动更改颜色快得多.

Wrap Up

回答我们在本文中提到的问题对于任何顶级Swift应用程序开发人员来说都是小菜一碟. 事实上,Swift语言本身并不难学习和使用. However, 请记住,当越来越多的新更新发布和新功能加入时,你的专职开发者是否优秀就会显露出来. Swift的精通在于能够在尽可能短的时间内正确理解和应用新的应用程序开发原则,以保持应用程序的功能领先.

我们希望你发现这篇文章中提出的问题是你寻求顶级Swift应用程序开发专家的坚实基础. 在美国和国外找到这样高质量的兼职或全职职位的候选人是非常值得的, 因为它们无疑会对团队的生产力和结果产生重大的积极影响.

顶尖的Swift开发者需求量很大.

Start Hiring