iOS开发SwiftSwifty Coding

答“卓同学的 Swift 面试题”--中篇

2017-03-17  本文已影响759人  DamonLu

接上篇,答“卓同学的 Swift 面试题”--上篇
面试题链接:卓同学的 Swift 面试题

在上篇中,回答了基础篇前11题,接着回答中间12题:

12. String 与 NSString 的关系与区别
13. 怎么获取一个 String 的长度
14. 如何截取 String 的某段字符串
15. throws 和 rethrows 的用法与作用
16. try? 和 try!是什么意思
17. associatedtype 的作用
18. 什么时候使用 final
19. public 和 open 的区别
20. 声明一个只有一个参数没有返回值闭包的别名
21. Self 的使用场景
22. dynamic 的作用
23. 什么时候使用 @objc
12. String 与 NSString 的关系与区别

Swift 的String类型与 Foundation NSString类进行了无缝桥接。他们最大的区别就是:String是值类型,而NSString是引用类型。
其他方面的差异就体现在各自api 上的差异。

13.怎么获取一个 String 的长度
let length1 = "string".characters.count
let length2 = "string".data(using: .utf8).count
let length3 = ("string" as NSString).length
14. 如何截取 String 的某段字符串

每一个String值都有一个关联的索引(index)类型,String.Index,它对应着字符串中的每一个Character的位置
具体参见:Accessing and Modifying a String

15.throws 和 rethrows 的用法与作用
public func map<T>(_ transform: (Element) throws -> T) rethrows -> [T]
16. try? 和 try!是什么意思

** try? ** 是用来修饰一个可能会抛出错误的函数。会将错误转换为可选值,当调用try?+函数或方法语句时候,如果函数或方法抛出错误,程序不会发崩溃,而返回一个nil,如果没有抛出错误则返回可选值
** try! ** 会忽略错误传递链,并声明“do or die”。如果被调用函数或方法没有抛出异常,那么一切安好;但是如果抛出异常,二话不说,给你崩
参考:what's difference in try! and try?

17. associatedtype 的作用

Swift中的协议(protocol)采用的是“Associated Types”的方式来实现泛型功能的

18. 什么时候使用 final
19. public 和 open 的区别

** open **

** public **

20. 声明一个只有一个参数没有返回值闭包的别名
typealias IntBlock = (Int) -> Void
21. Self 的使用场景
protocol Hello {
    func hello() -> Self
}
protocol MyProtocol { }
extension MyProtocol where Self: UIView { }
22. dynamic 的作用
23. 什么时候使用 @objc

在协议中使用 optional 关键字作为前缀来定义可选要求。可选要求用在你需要和 Objective-C 打交道的代码中。协议和可选要求都必须带上@objc属性。标记 @objc 特性的协议只能被继承自 Objective-C 类的类或者 @objc 类遵循,其他类以及结构体和枚举均不能遵循这种协议

上一篇下一篇

猜你喜欢

热点阅读