United StatesToptal的自由Swift开发人员 Since January 7, 2015
Ryan是一名高级iOS和网页开发人员,热衷于创造令人惊叹的用户界面和体验. 他在开发堆栈的任何地方工作都很舒服,并且有10多年的工作经验. He's well-spoken, 很容易沟通, quick to respond, and excels at figuring out optimal solutions for any challenge you present. Ryan has an entrepreneurial drive and understands the challenges startups face.
With 15+ years of success building great digital products around the world, 乔希以同情心和榜样来领导. 他会在需要的时候与团队的其他成员一起跳进战壕,并带来清晰的战略,帮助我们安全地驾驭数字海洋的湍流. Josh选择的工具是证据,同理心,清晰而动态的沟通,以及成长的心态.
United StatesToptal的自由Swift开发人员 Since October 16, 2013
Rinat is a technical iOS lead with over ten years of iOS development experience. 他使用过基于rest的api, 社交媒体整合, geolocation, core animation, 完全控制定制. Rinat拥有强大的产品应用开发愿景.
作为一个用户体验爱好者, Zoltan's greatest strength as an engineer is his precise design implementation. 他积极的态度和开放的心态使他能够将最优质的项目带到生活中. Zoltan在维护客户关系和管理团队工作流程方面的经验帮助他为团队提供最佳的整体价值.
Petru is a developer who's spent the last 14 years in the mobile industry, 在App Store上发布了100多款应用. To any project, 他带来了对sdk /库和iOS硬件/软件的深入了解, 出色的OOP技能, solid Node.js knowhow, and hands-on experience with RESTful web services in mobile apps. 除了他的技术专长, 他对敏捷工作流程也很熟悉, working with Git, 并在团队环境中茁壮成长.
Swift是苹果公司开发的一种通用的、多范式的编译式编程语言. It is powerful, intuitive, 并适用于广泛的平台, 包括移动设备, watches, desktops, and the cloud. 由于开源,它迅速流行起来. Swift的代码简单、交互且有趣. 语法简洁而富有表现力,应用程序在设计上是安全的,运行速度非常快.
没有Toptal就不会有Tripcents. Toptal Projects enabled us to rapidly develop our foundation with a product manager, lead developer, and senior designer. 在60多天的时间里,我们从概念到Alpha. 其速度、知识、专业知识和灵活性是首屈一指的. The Toptal team were as part of tripcents as any in-house team member of tripcents. They contributed and took ownership of the development just like everyone else. 我们将继续使用Toptal. 作为一家初创公司,它们是我们的秘密武器.
Brantley Pace, CEO & Co-Founder
Tripcents
我对我们与Toptal的合作经验非常满意. The professional I got to work with was on the phone with me within a couple of hours. I knew after discussing my project with him that he was the candidate I wanted. 我立即雇用了他,他没有浪费时间就完成了我的项目, 甚至通过添加一些很棒的设计元素来增加我们的整体外观.
Paul Fenley, Director
K Dunn & Associates
The developers I was paired with were incredible -- smart, driven, and responsive. 过去很难找到高质量的工程师和顾问. Now it isn't.
瑞安·洛克菲勒首席执行官
Radeeus
Toptal立即理解了我们的项目需求. 我们遇到了一位来自阿根廷的杰出自由职业者, from Day 1, 沉浸在我们的行业中, 与我们的团队无缝融合, understood our vision, 并产生了一流的结果. Toptal makes connecting with superior developers and programmers very easy.
Jason Kulik,联合创始人
ProHatch
As a small company with limited resources we can't afford to make expensive mistakes. Toptal为我们提供了一位经验丰富的程序员,他能够立即投入工作并开始做出贡献. 这是一次很棒的经历,我们会马上再来一次.
斯图尔特·波克尼校长
现场专用软件解决方案
We used Toptal to hire a developer with extensive Amazon Web Services experience. 我们面试了四位候选人,其中一位非常符合我们的要求. 这个过程迅速而有效.
Abner Guzmán Rivera,首席技术官和首席科学家
Photo Kharma
Sergio是一个很棒的开发者. 一流,反应迅速,工作效率高.
Dennis Baldwin,首席技术专家和联合创始人
PriceBlink
和Marcin一起工作是一种乐趣. He is competent, professional, flexible, and extremely quick to understand what is required and how to implement it.
我们与Toptal合作非常愉快. 他们为我们的应用程序找到了完美的开发人员,让整个过程变得非常简单. 它也很容易超出最初的时间框架, 我们可以在整个项目中保持同一个承包商. We definitely recommend Toptal for finding high quality talent quickly and seamlessly.
Ryan Morrissey, CTO
应用商业技术有限责任公司
我对Toptal印象深刻. Our developer communicates with me every day, and is a very powerful coder. 他是一个真正的专业人士,他的工作非常出色. 5 stars for Toptal.
Pietro Casoar, CEO
Ronin Play Pty Ltd
与Toptal合作是一次很棒的经历. Prior to using them, 我花了相当多的时间面试其他自由职业者,但没有找到我需要的. 在与Toptal合作后,他们在几天内就为我找到了合适的开发者. 与我一起工作的开发人员不仅提供高质量的代码, 但他也提出了一些我没有想到的建议. 我很清楚,阿莫里知道自己在做什么. Highly recommended!
George Cheng, CEO
Bulavard, Inc.
As a Toptal qualified front-end developer, I also run my own consulting practice. 当客户来找我帮忙填补他们团队中的关键角色时, Toptal是我唯一愿意推荐的地方. Toptal的所有候选人都是精英中的精英. Toptal是我在近5年的专业在线工作中发现的性价比最高的网站.
Ethan Brooks, CTO
Langlotz Patent & Trademark Works, Inc.
在希格尔的早期, 我们需要一流的开发者, at affordable rates, in a timely fashion. Toptal delivered!
Toptal’s ability to rapidly match our project with the best developers was just superb. 开发人员已经成为我们团队的一部分, and I’m amazed at the level of professional commitment each of them has demonstrated. For those looking to work remotely with the best engineers, look no further than Toptal.
Laurent Alis, Founder
Livepress
Toptal让寻找合格的工程师变得轻而易举. 我们需要一个有经验的ASP.. NET MVC架构来指导我们的启动应用程序的开发, Toptal在不到一周的时间里为我们找到了三位优秀的候选人. 在做出我们的选择后,工程师立即在线并开始工作. It was so much faster and easier than having to discover and vet candidates ourselves.
At Toptal, 我们对Swift开发人员进行了彻底的筛选,以确保我们只为您匹配最优秀的人才. Of the more than 200,每年有5000人申请加入Toptal网络, 只有不到3%的人能达标. 你将与工程专家(而不是一般的招聘人员或人力资源代表)一起了解你的目标, technical needs, and team dynamics. 最终的结果是:经过专家审查的人才从我们的网络,定制匹配,以满足您的业务需求.
我可以在48小时内通过Toptal雇佣Swift开发人员吗?
取决于可用性和进度, you could start working with a Swift developer within 48 hours of signing up.
Toptal Swift开发者的无风险试用期是多长?
我们确保您和您的Swift开发人员之间的每次约定都从长达两周的试用期开始. This means that you have time to confirm the engagement will be successful. 如果你对结果完全满意, we’ll bill you for the time and continue the engagement for as long as you’d like. 如果您不完全满意,我们不会向您收费. From there, 我们要么分道扬镳, 或者我们可以为您提供另一位可能更合适的专家,我们将与他开始第二轮谈判, no-risk trial.
Share
如何聘请优秀的Swift开发人员
The Challenge
自2014年推出Objective-C以来,Swift一直在努力超越它. 作为iOS应用宝座上Objective-C的继承者, 它拥有新一代编程语言应该具备的一切. It’s intuitive, interactive, safer, faster, more reliable, time saving, and free. Swift是为ipad设计的, iPhones, 以及所有其他苹果设备,并与Cocoa和Cocoa Touch框架完全兼容.
转折点出现在2015年12月,当时苹果对其新生儿的强烈偏好通过将其开源来证明, 发布带有补丁和更新的新大版本. Swift 2已经足够稳定,可以在应用程序中安全使用, 从而确保了它作为watchOS首选语言的地位, tvOS, and iOS development.
尽管Swift的发展在两年前才出现, 目前已经有一个庞大的开发人员社区,他们被认为是这方面的专家. However, the difference between a developer and a great developer is their ability to adapt, learn, 与世界其他地方保持同步. 因为斯威夫特面临着一个光明的未来, 而且每年肯定会有很多新的更新, a great developer has to be on top of the evolutionary curve all the time. 找到这样的人才并不是一件容易的事. So, 这篇文章提供了一些问题的样本,这些问题对于评估候选人对Swift掌握的广度和深度至关重要.
Questions and Answers
Q: Describe Swift. 这是一种什么样的语言啊? 它的主要福利是什么?
Swift is a compiling language whose source code is translated to machine code. 它与它的前身Objective-C和苹果的Cocoa框架完全兼容. 通过开源语言, 苹果明确表示,Swift不仅仅是一种用于移动应用程序的语言. New frameworks, like Perfect这些都是Swift成为服务器端语言的第一次尝试. 这样一来,Swift开发人员和全栈开发人员将能够使用同一种语言创建客户端和服务器端应用程序.
以下是Swift的一些主要优势:
可选类型,使应用程序抗崩溃
内置错误处理
Closures
比其他语言快得多
Type-safe language
支持模式匹配
Q: Explain the main differences between classes and structures in Swift programming.
结构更快. Class instances are allocated on the heap, while structure instances are on the stack.
结构不支持继承.
结构体为所有没有默认值的属性提供默认初始化式:
struct Person {
let name: String
}
让patrik = Person(name: " patrik ")
let patrik2 = Person() //不编译,name属性需要一个值
问:解释Swift中的泛型.
复杂的应用程序需要没有任何重复的干净代码. Here, generics come in handy as they can help us to avoid unnecessary duplication. In general, generics are considered as one of the most sophisticated features of Swift, 而且应该尽可能多地使用它们. They enable us to write classes and methods without specifying the types they use. 只要有可能,Swift就会在内部使用泛型.
Let’s have a look on one of the best example, arrays, as they can store any types. 在我们的例子中,我们将实现一个简单的数据结构, 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 stored properties is calculated only when the property is called for the first time. 有些情况下 lazy 房地产对开发商来说非常方便. 假设该属性需要相当长的初始化时间, 就像在实例化storyboard的控制器数组时 UIPageViewControllers.
在我们的例子中,我们调用 myControllers two times in viewDidLoad (这只是为了测试目的,看看初始化是如何工作的). Our lazy variable contains a print statement to demonstrate what’s happening under the hood. 打了两次电话之后 let _ = myControllers,控制台日志中只有一条消息. 那是因为第二次 lazy variable is already initialized, and there is no need to do it once again.
问:讨论如何传递一个变量作为引用.
在开始讨论之前, we need to mention that there are two types of variables: reference and value types. 这两种类型的区别在于,通过传递值类型, 该变量将创建其数据的副本, and the reference type variable will just point to the original data in the memory.
在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 keyword before the parameter’s declaration and ampersand before the variable. 让我们考虑一个类似的例子:
斯威夫特2介绍了新的 defer 关键字,该关键字提供了当外部块即将完成时将执行的代码块. We could say that defer block will be executed in the case when execution is leaving the current scope. 考虑下面的代码,并尝试回答输出将是什么.
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 statement in the “for loop scope” is executed after each iteration of the loop. That’s because defer的父作用域是循环作用域.
这个数大于零
defer positive
input is 10
这个数大于零
defer positive
input is 10
Using defers can significantly help programmers to avoid duplication, but it is crucial to know defer它的行为和执行时间. Simple print 函数可以验证开发人员是否理解问题.
问:为什么使用高阶函数更好? Explain with examples.
以另一个函数作为参数的函数, or return a function, as a result, 被称为高阶函数吗. Swift将这些函数定义为 CollectionType. 最基本的高阶函数是a filter. 它是数组上的一个函数,它接受另一个函数,该函数将用于返回数组的新过滤版本. 高级函数的主要目的是帮助我们在更短的时间内编写bug更少的代码. At first glance, 这些函数可能有点吓人, 但优秀的开发人员应该尽可能多地使用它们.
通过将相似的属性包装在一起, 我们可以显著减少bug, 比如使用相同的钥匙 NSUserDefaults 对于两个不同的属性. Additionally, this way provides us a spell check if we wrote the key correctly. Also, 如果我们决定去掉一些键或颜色, 删除一行将告诉我们哪些文件使用了弃用的密钥. 在一个地方使用所有的钥匙有很多好处.
然而,我们知道创造 Color or Settings 结构在全局作用域级别并不是最好的方法, 因为它就像一个全局变量, 哪种做法不好. 我们应该将这些设置放入包装器中,然后将其与项目类型直接连接.
回答我们在本文中提到的问题对于任何顶级Swift应用程序开发人员来说都是小菜一碟. The truth is, the Swift language itself is not difficult to learn and use. However, 请记住,当越来越多的新更新发布和新功能加入时,你的专职开发者是否优秀就会显露出来. Swift的精通在于能够在尽可能短的时间内正确理解和应用新的应用程序开发原则,以保持应用程序的功能领先.