IOS热门访谈问答(2019年1月)第1部分

如有其他疑问,请查看以前的文章-2018/2019年度IOS面试常见问题解答

Q1。 写下与reduce() api?类似的自定义方法reduce() api?

Ans: sum = array.reduce(0, +)
//reduce() here is an ((Int, ((Int, Int) -> Bool)) -> Int)
//and the + operator is func +(lhs: Int, rhs: Int) -> Bool,
//... or ((Int, Int) -> Bool), so there's no need to define reduce's closure.

Q2。 如何使属性的getter可用,但只能从代码中快速设置属性?

回答:下面的示例显示TrackedString结构的版本,其中该结构的定义是具有显式公共访问级别。 因此,结构的成员(包括numberOfEdits属性)默认具有内部访问级别。 通过结合使用publicprivate(set)访问级别修饰符,可以使结构的numberOfEdits属性getter公开,而其属性setter私有。

Q3。 在Swift 4.2中,引入了用户定义的“动态成员查找”类型,其目的是什么?

回答:此功能的驱动力是改善与固有动态语言(例如Python,Javascript,Ruby和其他语言)的互操作性。 也就是说,此功能经过设计,可以以模块化的方式应用于其他固有的动态域。

Swift 4.2引入了新的@dynamicMemberLookup属性。 使用它的类型为在运行时解析的任意名称提供“点”语法-以完全类型安全的方式。 这提供了语法糖,使用户可以编写:

 一个= someValue.someMember 
someValue.someMember =一个
mutateParameter(&someValue.someMember)

并由编译器解释为:

  a = someValue [dynamicMember:“ someMember”] 
someValue [dynamicMember:“ someMember”] = a
mutateParameter(&someValue [dynamicMember:“ someMember”])

这允许someValue的静态类型决定如何实现这些动态成员引用。

Q4。 函数式编程和OOPS有什么区别?

答:

Q5。 您将如何通过生物特征认证保护钥匙串物品?

回答:当您在钥匙串中存储密码或私钥之类的安全物品时,您规定了以后可以访问该物品的条件。 除其他外,您可以告诉钥匙串服务,每次尝试读取商品时,它都应首先寻求用户的许可-例如,通过使用Face ID或Touch ID进行生物特征验证用户。 您同时依赖于Security和LocalAuthentication 框架来启用此行为。

转到下一部分: 热门IOS面试问答(2019年1月)第2部分

希望本文对希望了解iOS面试知识的人有用,请❤️将这篇文章推荐给其他人😊。 让我知道您的反馈。 🙂

参考文献:

  1. https://github.com/apple/swift-evolution/blob/master/proposals/0195-dynamic-member-lookup.md
  2. https://docs.swift.org/swift-book/LanguageGuide/AccessControl.html
  3. https://www.educba.com/functional-programming-vs-oop/
  4. https://developer.apple.com/documentation/localauthentication/accessing_keychain_items_with_face_id_or_touch_id