迅速

雇用 Top 3%自由职业者Swift开发人员

Toptal.是顶级Swift开发人员,工程师,程序员,编码器,建筑师和顾问的市场。顶级公司和初创公司选择Toptal Swift Freelancers为他们的关键任务软件项目。

无风险审判,仅在满意时付款。

客户率 Toptal. Swift Developers4.4 / 5.0平均截至480年4月1日,2021年4月1日

通过领先的品牌和初创公司信任

租用自由职业者Swift开发人员和工程师

丹纳帕尔斯基

自由职业者Swift开发人员

美国自从2015年12月20日以来Toptal的自由职业者Swift开发商

丹是一种软件架构师和技术专业专业专注于区块链技术的应用。他拥有多年的经验,为客户提供专业的咨询服务,从初创公司到全球公司。他专门为艰难的工程挑战带来严格的测试和防弹码。他在人工智能,区块链,机器学习和自动化的许多方面都有深刻的专业知识。

展示更多

Andrej Adamcik.

自由职业者Swift开发人员

斯洛伐克自2014年12月19日以来Toptal的自由职业者Swift开发商

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

展示更多

josippetrić.

自由职业者Swift开发人员

克罗地亚自从2016年5月31日起在Toptal的自由职业者Swift开发商

作为具有多年经验的软件工程师,JOSIP开发了一种敏锐的意识,可以建立可扩展,可维护和用户友好的应用。他的首选平台是他设计和开发了广泛的应用,从简单的应用程序开发了复杂的大型应用程序。 joSip是一名经过验证的团队领导和一个具有典型沟通和社交技能的团队合作者。

展示更多

Oleksandr Malovichko.

自由职业者Swift开发人员

德国自从2017年3月7日起在Toptal的自由职业者Swift开发商

Oleksandr是一名高级IOS工程师,拥有多年的移动设备和平板电脑设备的软件开发经验。 Oleksandr致力于不断发现,评估和实施新技术,以最大限度地提高开发效率。

展示更多

Sergey Dikovitsky.

自由职业者Swift开发人员

白俄罗斯自从2018年1月17日起在Toptal的自由职业者Swift开发商

Sergey是一个高级IOS开发人员,拥有四年多的软件开发经验,编写高度可读,清洁,可维护的源代码。他已经使用了各种技术堆栈:休息和套接字API,社交媒体集成,地理位置,音频/图像/视频处理,复杂UI和动画自定义。

展示更多

Zoltan Varadi.

自由职业者Swift开发人员

匈牙利自2015年9月15日以来Toptal的自由职业者Swift开发商

作为用户体验爱好者,Zoltan'作为工程师的最大实力是他精确的设计实现。他有一个积极的态度和一个开放的心态,使他能够为生活带来最好的质量项目。 Zoltan.'在维护与客户的关系和管理团队工作流程方面的经验帮助他为他的团队提供最佳总体价值。

展示更多

rinat sharipov.

自由职业者Swift开发人员

俄罗斯自从2013年9月2日以来,自由职业者Swift开发商处于Toptal

Rinat是一名高级IOS工程师,拥有超过八年的软件开发经验,在此期间,他与基于休息的API,社交媒体集成,地理定位,核心动画和完全控制定制工作。

展示更多

Damir Djozic.

自由职业者Swift开发人员

塞尔维亚自2016年10月19日以来Toptal的自由职业者Swift开发商

Damir是一种以卓越的IOS开发商和研究专业人员,具有工程和研究职位的经验。他的目标是考虑到用户创建软件,创建具有可用和直观的用户界面体验的应用程序,同时创建高度可读且易于维护的源代码。 Damir不断努力学习新技术,并寻找这种快速变化的行业的方法。

展示更多

Petru Gabriel Lupu.

自由职业者Swift开发人员

西班牙自从2015年3月19日起在Toptal的自由职业者Swift开发商

Petru是一名开发商 'S在移动行业中花了过去14年,在App Store中出版了100多个应用程序。对于任何项目,他为SDK /库和IOS硬件/软件,卓越的OOP技能,稳健Node.js知识和实践经验,以及在移动应用中的休眠Web服务的实践经验。除了他的技术专长外,他还熟悉敏捷工作流程,与Git一起工作,并在团队环境中茁壮成长。

展示更多

丹尼尔梅佐

自由职业者Swift开发人员

德国自2014年1月31日以来Toptal的自由职业者Swift开发商

丹尼尔拥有超过十年的开发移动应用程序的经验。他从约会应用程序到医疗应用程序建立了一切。他是一个广泛的开发人员,具有推动技术能力限制的开发参与,最先进的应用程序。

展示更多

马修卡罗尔

自由职业者Swift开发人员

美国自从2016年10月13日以来Toptal的自由职业者Swift开发商

Matthew是一个全堆叠的iOS开发人员和苹果的贡献者'S Swift项目。他于2002年毕业于Georgia Tech,并于2002年毕业于计算机科学BS。从那时起,Matthew在C / UNIX,Java / Spring和IOS最近开发了全堆栈IOS和SOA服务。自2014年秋天以来,马修一直在发展。马修高度重视沟通,可用于向客户网站旅行。

展示更多

立即注册以查看更多档案。

开始招聘

需要一个专业管理的软件开发项目
从开始到结束?

无论您的业务需求是什么,我们都会策划全球顶级人才的全面托管团队,为您提供最高质量的解决方案。

招聘指南

雇用伟大的Swift开发人员指南

SWIFT是Apple开发的一般目的,多范式编译编程语言。它功能强大,直观,适用于广泛的平台,包括移动设备,手表,桌面和云。由于开放,它变得非常迅速。迅速'S代码简单,互动和乐趣。语法简洁又炫耀,应用程序是安全的,并且跑得很快。

阅读招聘指南

SWIFT招聘资源

TrustPilot.
Toptal. in the press

...允许公司快速组装具有特定项目的合适技能的团队。

尽管对编码人员的需求加速了,Toptaltal旨在自行为几乎常春藤联盟级审查。

我们的客户
构建一个全球使用的跨平台应用程序
Thierry Jakicevic.
构建一个全球使用的跨平台应用程序
1
2
3
为游戏创建一个应用程序
Conor Kenney.
为游戏创建一个应用程序
1
2
3
领导数字转型
Elmar Platzer.
领导数字转型
1
2
3
推荐书

三普国不会'T存在没有顶尖。顶部项目使我们能够用产品经理,铅开发商和高级设计师迅速发展我们的基础。在60多天内,我们从概念到阿尔法。速度,知识,专业知识和灵活性是秒数。 Toptaltal团队作为三级队员的三级队员的一部分。他们贡献并就像其他人一样贡献并获得了发展的所有权。我们将继续使用TOPTAL。作为一个启动,他们是我们的秘密武器。

布兰特利步长,首席执行官& Co-Founder

三级

我对Toptaltal的经验非常满意。我必须与我一起工作的专业人士在几个小时内与我一起。我知道在与他讨论我的项目后,他是我想要的候选人。我立即雇了他,他浪费了浪费时间来到我的项目,甚至通过添加一些优秀的设计元素来加强额外的英里,以增强我们的整体外观。

Paul Fenley,导演

k dunn.& Associates

我与令人难以置信的 - 聪明,驱动和响应性的开发人员。它曾经很难找到优质的工程师和顾问。现在它是't.

Ryan Rockefeller,CEO

辐射群

Toptal.立即了解我们的项目。我们与阿根廷的特殊自由职业者与阿根廷,从第1天沉浸在我们的行业中,与我们的团队无缝混合,理解我们的愿景,并产生了顶级缺口结果。 Toptal与卓越的开发人员和程序员相连,非常容易。

Jason Kulik,联合创始人

PROHATCH.

作为一个有限资源的小公司,我们可以'不起赚得昂贵的错误。 Toptal为我们提供了一个经验丰富的程序员,他们能够击中地面运行并立即开始贡献。这是一个伟大的经历和我们'd再次在心跳中重复。

斯图尔特Pocknee,校长

站点特定的软件解决方案

我们使用Toptal聘请开发人员,具有广泛的亚马逊网络服务体验。我们采访了四名候选人,其中一个候选人竟然有适合我们的要求。该过程快速有效。

ABNERGUZMÁNVILLA,CTO和首席科学家

照片kharma.

Sergio是一个令人敬畏的开发人员。顶级陷波,响应,并有效地完成了工作。

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

PriceBlink.

与马林一起工作是一种快乐。他是有能力,专业,灵活的,非常快速地了解所需的内容以及如何实现它。

andréFischer,CTO

发布

我们需要一个专家工程师,他们可以立即启动我们的项目。辛巴纳斯与他的工作超出了我们的期望。不得不采访和追逐专家开发商是一个优秀的时光,让每个人都对我们的选择感到更加舒适,以改变平台来利用更强大的语言。 Toptog易于方便地制作了该过程。 Toptal现在是我们寻找专家级别帮助的第一名。

Web开发的高级VP德里克未成年人

NetWorld Media Group.

Toptal.'S开发人员和建筑师都非常专业,易于使用。他们生产的解决方案相当定价和最高品质,减少了推出的时间。再次感谢,Toptal。

Jeremy Wessels,CEO

Kognosi.

我们拥有Toptal的伟大体验。他们将我们与完美的开发人员配对,为我们的应用程序并使过程非常容易。它也很容易超出初始时间范围,我们能够在我们的项目中保持相同的承包商。我们绝对推荐顶尖,用于快速和无缝地找到高质量的人才。

Ryan Morrissey,CTO

应用业务技术,LLC

I'M Toptal令人难以置信地印象深刻。我们的开发人员每天与我沟通,是一个非常强大的编码器。他'真正的专业人士,他的工作很棒。顶部5星。

Pietro Casoar,CEO

Ronin Play Pty Ltd

与Toptal一起工作是一个很好的体验。在使用它们之前,我花了很长时间采访其他自由职业者和尚未'找到我需要的东西。与Toptal一起参与后,他们在几天内与完美的开发人员匹配。开发商I.'m不仅可以提供质量代码,而且他还提出了我达到的事情的建议't thought of. It'对我来说清楚,阿拉夫里知道他在做什么。强烈推荐!

乔治城,首席执行官

Buravard,Inc。

作为顶级合格的前端开发人员,我也运营了自己的咨询练习。当客户来找我来帮助填补他们的团队上的关键角色时,Toptal是我唯一舒适的推荐的地方。 Toptal.'整个候选池是最好的。 Toptal是我的最佳价值我'在近一年的专业在线工作中发现了。

Ethan Brooks,CTO

Langlotz专利&商标作品,Inc。

在嘻嘻哈哈'早期,我们以及时的方式,我们需要一流的开发商,以实惠的价格。 Toptal送货!

Lara Aldag,CEO

h

Toptal.让候选人非常容易,让您能使他们有能使他们有能力提供。我肯定会向寻求高技能开发人员的人推荐他们的服务。

Michael Gluckman,数据经理

mxit.

Toptal.迅速匹配我们的项目与最佳开发人员的能力只是一流的。开发商已成为我们团队的一部分,我对他们中的每一个都证明了专业承诺的水平。对于那些希望远程工作的人与最好的工程师来说,看起来不仅仅是Toptaltal。

Laurent Alis,创始人

临身

Toptal.让找到合格的工程师微风。我们需要经验丰富的ASP.NET MVC架构师来指导我们的启动应用程序的开发,并在不到一周内为我们提供三位伟大的候选人。在我们选择后,工程师立即在线并击中地面运行。它比我们自己发现和兽医候选人更快和更容易。

杰夫凯利,联合创始人

协调解决方案

我们需要在Scala中的一些短期工作,Toptal在24小时内发现了我们一个伟大的开发人员。这不仅仅是通过任何其他平台都无法实现。

Franco Arda,联合创始人

whatadswork.com

Toptal.为正在进行快速发展和规模的企业提供禁令解决方案。每个工程师我们'通过Toptal签约已经很快集成到我们的团队中,并将其工作持有最高标准的质量,同时保持炽热的发展速度。

Greg Kimball,联合创始人

nifti.com.

如何通过Toptal雇用Swift开发人员

1

与我们的行业专家交谈

Tophteal Engineering主任将与您合作,了解您的目标,技术需求和团队动态。
2

与手工选择的人才合作

在几天内,我们'LL向您介绍您的项目的正确Swift开发人员。平均匹配时间在24小时内。
3

右边合身,保证

与您的新SWIFT开发人员合作进行试用期(仅在满意的情况下付款),确保他们'在开始参与之前,右边适合。

常见问题解答

  • Toptal Swift开发人员如何不同?

    在Toptal,我们彻底屏蔽了我们的Swift开发人员,以确保我们只与您匹配最高口径的人才。每年申请加入Toptal Network的100,000多人,削减少于3%。您将与工程专家(从不泛化招聘人员或人力资源代表)合作,了解您的目标,技术需求和团队动态。最终结果:来自我们网络的专家审计人才,习惯符合您的业务需求。 现在开始。

  • 我可以在不到48小时内雇用Swift开发人员到Toptalal吗?

    根据可用性以及您可以进行的快速,您可以在注册的48小时内开始使用Swift开发人员。 现在开始。

  • Toptal Swift开发人员的无风险试用期是多少?

    我们确保您和您的Swift开发人员之间的每次参与开始于最多两周的试用期。这意味着您有时间确认订婚将是成功的。如果您对结果完全满意,我们会为您收取时间并继续接触,只要您想要。如果你没有完全满意,你将不会收取费用。从那里,我们可以通过部分方式,或者我们可以为您提供可能更适合的另一个专家,并与我们将开始第二名,无风险的审判。 现在开始。

分享
迅速

如何聘请一个伟大的Swift开发人员

挑战

迅速自2014年推出以来一直努力努力努力超越Objective-C.作为iOS应用程序王位的继承者,它必须具有新一代编程语言所拥有的一切。它是直观的,互动,更安全,更快,更可靠,节省时间和自由。 Swift旨在与iPad,iPhone和所有其他Apple设备一起使用,并与Cocoa和Cocoa触摸框架完全兼容。

swift  - 一种统治它们的一种语言

迅速 - 一种统治它们的一种语言。

原始策略是通过展示其所有特权,使开发人员迁移到新语言。但是,Swift的第一个版本是不稳定的,越野车,而不是与Xcode完全兼容。

突破点是2015年12月,当苹果对其新生儿的强烈偏好是通过开源的开展来证明,并用补丁和更新释放新的大版本。 SWIFT 2一直足够稳定,可在应用中安全使用,从而将其作为Watchos,TVOS和iOS开发的首选的第一语言。

虽然Swift开发只有两年前看到的一天,但已经有一个大型开发商社区被认为是主题的专家。然而,开发人员和伟大开发人员之间的差异是他们对世界其他地区的适应,学习和保持步伐的能力。由于SWIFT正面临着光明的未来,并且每年都会有许多新的更新,伟大的开发人员必须一直在进化曲线之上。找到这样一个租赁的才能不是一件容易的任务。因此,本文提供了对评估候选人掌握迅速的宽度和深度至关重要的问题。

问题和解答

问:描述SWIFT。它是什么样的语言?它的主要好处是什么?

迅速是一种编译语言,其源代码被翻译成机器代码。它与其前身目标-C完全兼容,并与Apple的可可框架完全兼容。通过开放语言,Apple使其愿景明确表示,Swift只是只有移动应用程序的语言。新框架,就像 完美的,首先尝试制作Swift服务器侧语言。结果将是Swift开发人员和全堆栈开发人员将具有使用相同语言创建客户端和服务器端应用程序的权力。

提到SWIFT的一些主要优点:

  • 可选类型,使应用抗碰撞
  • 内置错误处理
  • 关闭
  • 与其他语言相比要快得多
  • 类型安全语言
  • 支持模式匹配

问:解释SWIFT编程中的类和结构之间的主要差异。

类和结构是大多数编程语言的基本构建块。但是,它们之间存在差异。要充分利用它们,我们需要了解他们提供的所有可能性。每个开发人员都应该知道并坚持的某些原则。

让我们从课程和结构具有共同的属性开始:

  • 两者都符合协议以将功能标准化为特定目的,接口。
  • 两者都可以扩展其功能以添加其他方法而不修改原始类或结构。

但是,比了解他们共同的内容更重要的是知道它们是如何不同的:

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

let patrik = Person(name: "Patrik")

let patrik2 = Person() // does not compile, name property needs a value

问:解释Swift中的泛型。

复杂的应用程序需要清洁代码,没有任何重复。在这里,仿制机器可以帮助我们避免不必要的重复。通常,泛型被认为是Swift最复杂的特征之一,它们应该尽可能多地使用。它们使我们能够编写类和方法而不指定他们使用的类型。斯威夫特在内部使用泛型。

Let’s have a look on one of the best example, arrays, as they can store any types. In our example, we will implement a simple data structure, Queue, to demonstrate how powerful and useful generics can be:

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

let q = Queue<Int>()

Here, we removed the need to create Queue for other types that we would use in the application later. Our Queue can contain any type, and we were able to define it in one place. It saved us a lot of time that would be otherwise spent on setting the Queue each time later.

Q: Explain the lazy keyword.

An initial value of the lazy stored properties is calculated only when the property is called for the first time. There are situations when the lazy properties come very handy to developers. Imagine that the property needs a significant time for initialization, like when instantiating an array of controllers for storyboards used for UIPageViewControllers.

class MyController: UIPageViewController {
    
    lazy var myControllers: [UIViewController] = {
        print("initialization")
        guard let storyboard = self.storyboard else { return [] }
        let controller1 = storyboard.instantiateViewControllerWithIdentifier("Controller1")
        let controller2 = storyboard.instantiateViewControllerWithIdentifier("Controller2")
        let controller3 = storyboard.instantiateViewControllerWithIdentifier("Controller3")
        return [controller1, controller1, controller1]
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let _ = myControllers
        let _ = myControllers
    }
}

In our example, we called myControllers two times in viewDidLoad (it is just for testing purposes, to see how the initialization works). Our lazy variable contains a print statement to demonstrate what’s happening under the hood. After calling two times let _ = myControllers, there is only one message in a console log. That’s because the second time lazy variable is already initialized, and there is no need to do it once again.

问:讨论如何将变量传递为参考。

在进行讨论之前,我们需要提到有两种类型的变量:参考和值类型。这两种类型之间的差异是通过传递值类型,变量将创建其数据的副本,并且引用类型变量将指向内存中的原始数据。

在SWIFT中,所有类实例都是引用类型。具有类对象的变量只是对内存的指针。同样适用于作为参数的功能。考虑示例:

class A: CustomStringConvertible {
    var name = "Patrik"
    var description: String {
        return name
    }
}

func changeName(object: A) {
    object.name = "Thomas"
}

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

Here, an instance myObject is passed to the changeName function, and there is no need to mark parameters as reference types. Instead, we simply need to know some rules about how they behave when used with different parameter types. In this case, the print(myObject) will write “Thomas”.

Structures, Arrays, Strings, and Dictionaries are value types. To achieve a similar effect, to pass a variable to a function as a reference type, we need to add inout keyword before the parameter’s declaration and ampersand before the variable. Let’s consider a similar example:

func changeFirstElement(inout input: [Int]) {
    input[0] = 9
}

var array = [1, 2, 3]
changeFirstElement(&array)
print(array) // [9, 2, 3]

Q: Explain what defer is, and when you should to use it.

迅速 2 introduced the new defer keyword which provides a block of code that will be executed when the outer block is going to be finished. We could say that defer block will be executed in the case when execution is leaving the current scope. Consider the following code, and try to answer what the output will be.

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

As we previously stated, the defer block will be executed at the end of the function even if it is declared in the first line of the write() function.

输出结果将是:

start loop
0
1
2
end

现在,一个更复杂的例子:

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

输出是:

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

It’s worth noting that the defer statement in the “for loop scope” is executed after each iteration of the loop. That’s because defer’s parent scope is a loop scope.

Nesting defer block in if statements will do the same like in a for loop.

func write3(input: Int) {
    if input > 0 {
        print("the number is greater than zero")
        defer { print("defer positive") }
    }
    print("input is ", input)
}
write3(10)

输出是:

the number is greater than zero
defer positive
input is  10
the number is greater than zero
defer positive
input is  10

Using defers can significantly help programmers to avoid duplication, but it is crucial to know defer’s behavior and when it’s executed. Simple print functions can verify whether the developer understands the issue.

问:为什么要使用更高阶函数更好?用例子解释。

Functions that take another function as a parameter, or return a function, as a result, are known as higher-order functions. Swift defines these functions as CollectionType. The very basic higher order function is a filter. It’s a function on the array which accepts another function that will be used to return a new filtered version of the array. The main purpose of the higher functions is to help us write code with fewer bugs and in less time. At first glance, these functions might be scary, but a good developer should use them as much as possible.

我们可以采用一个功能并将其放入另一个功能的事实使我们能够将大量的小功能组成更大的功能。如果我们意识到这一点,则代码的可读性将要高得多。

让我们假设我们有一系列数字。我们如何只选择比零更大的那些?一种非常简单的方法是:

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]
let positive = numbers.filter { (value: Int) -> Bool in
    return value > 0
}
print(positive) // [4, 5]

In the code example above, filter function will loop over each value, and for each value, it will pass it to a callback function as the current value. A callback function will then return a Boolean value to determine whether this value should be in the output array or not.

迅速使我们能够通过推断其参数的类型和返回的值的类型来使用较短版本的闭包。因此,当函数直接传递为参数时,无需编写完整声明。

let numbers = [-10, 4, -3, 5]
let positive = numbers.filter { $0 > 0 }
print(positive) // [4, 5]

迅速 also provides the map function which returns a new array containing of all the new mapped values and only with one line of code.

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

To sum all values in an array, there is a reduce higher order function to help us achieve it.

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

问:将项目组合为尽可能干净的项目进行组织设置的最佳实践是什么?

Every project includes some custom settings, like API keys, names of NSUserDefault keys, or a palette of used colors in the application. Small projects do not require any precise rules for this to work properly. We can simply use something like the following:

label.textColor = UIColor(red: 34/255, green: 36.0/255, blue: 38/255, alpha: 1)
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "isTutorialShown")

但是,项目往往会增长,应用程序的设计将改变,我们需要一个更好的系统将“共享”数据在一个地方进行分组。我们需要一种方法只需更改代码的一行,如应用程序颜色,并且它将其正常传播到整个项目。

解决这个问题有多种方法。让我们检查一个可能的解决方案:

struct Color {
    static let appColor = UIColor(red: 34/255, green: 36/255, blue: 38/255, alpha: 1)
    static let greyColor = UIColor(red: 131.8/255, green: 131.8/255, blue: 131.8/255, alpha: 1.0)
}

struct Settings {
    struct NSUserDefaults {
        static let isTutorialShown = "isTutorialShown"
    }
    struct APIKey {
        static let fabric = "xxx"
    }
}

By wrapping similar properties together, we can significantly reduce bugs, like using the same key in NSUserDefaults for two various properties. Additionally, this way provides us a spell check if we wrote the key correctly. Also, if we decide to remove some key or color, removing one line will inform us which files used that deprecated key. There are so many benefits for using all the keys in one place.

However, we know that creating Color or Settings struct in a global scope level is not the best approach, as it is like a global variable, which is a bad practice. We should put these settings into a wrapper, which is then directly connected with a type of item.

extension UIColor {
    struct MyProject {
        static let appColor = UIColor(red: 34/255, green: 36/255, blue: 38/255, alpha: 1)
        static let greyColor = UIColor(red: 130/255, green: 130/255, blue: 130/255, alpha: 1)
    }
}

extension NSUserDefaults {
    struct MyProject {
        static let isTutorialShown = "isTutorialShown"
    }
}

使用键的结果将是:

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

利用SWIFT扩展可以为我们提供一种复杂的方式如何对所有必要的设置进行组,并使设计更清洁。为所有扩展创建一个单独的文件也是一个好主意,然后我们将设计变化快得多,而不是通过通过每个文件手动更改颜色。

包起来

回答我们本文所涵盖的问题应该是任何顶级Swift App Developer的一块蛋糕。事实是,Swift语言本身并不难以学习和使用。但是,请记住,在越来越多的新更新中,您的专用开发人员是否良好,也不会透露出现越来越多的新功能。 Swift的掌握是关于能够正确理解并在最短的时间内应用新的应用程序开发原则,以保持您的应用程序的功能。

我们希望您找到本帖子中提出的问题,以追求顶级SWIFT应用开发专家的坚实基础。在美国和国外寻找如此高质量的候选人,这是值得的努力,因为它们无疑将对您的团队的生产力和结果产生重大积极影响。

特色TOPTAL SWIFT出版物

最高迅速开发人员需求量很高。

开始招聘