參考文件:[譯] 官方 Swift API 設計規範
- 說明下面兩個方法為什麼第一個宣告瞭引數標籤 at,第二個方法預設了。
extension List {
public mutating func remove(at position: Index) -> Element
public mutating func remove(_ member: Element) -> Element?
}
複製程式碼
- 下面兩種宣告方式哪一個是正確的,說明原因。
func add(_ observer: NSObject, for keyPath: String)
func addObserver(_ observer: NSObject, forKeyPath path: String)
複製程式碼
- 下面哪一種宣告方式更好,說明原因。
x.subViews(havingColor: y)
x.subViews(color: y)
複製程式碼
- 下面哪一種宣告方式更好,說明原因。
let foreground = Color(red: 32, green: 64, blue: 128)
let foreground = Color(havingRGBValuesRed: 32, green: 64, andBlue: 128)
複製程式碼
- 下面兩個方法有什麼區別?
x.sort()
x.sorted()
複製程式碼
Protocol
有什麼命名規則?
- 什麼情況可以宣告全域性函式?
- 下面宣告的方法預設了第一個引數標籤有什麼原因?
extension Shape {
func contains(_ other: Point) -> Bool { ... }
func contains(_ other: Shape) -> Bool { ... }
}
複製程式碼
- 下面這樣宣告會帶來什麼問題?
extension Box {
func value() -> Int? { ... }
func value() -> String? { ... }
}
複製程式碼
- 下面的引數名稱哪一個比較好?
func filter(_ predicate: (Element) -> Bool) -> [Generator.Element]
func filter(_ includedInResult: (Element) -> Bool) -> [Generator.Element]
複製程式碼
- 下面宣告錯誤的地方在哪裡?
extension String {
public func compare(_ options: CompareOptions = [], other: String, range: Range? = nil, locale: Locale? = nil
) -> Ordering
}
複製程式碼
- 下面的函式為什麼不需要宣告引數標籤?
min(number1, number2)
zip(sequence1, sequence2)
複製程式碼
- 下面兩個初始化方法為什麼一個有引數標籤,一個沒有?
extension UInt32 {
init(_ value: Int16)
init(truncating source: UInt64)
}
複製程式碼
- 下面兩個方法的宣告哪一個比較好?
a.move(toX: b, y: c)
a.moveTo(x: b, y: c)
複製程式碼
- 下面兩個方法的宣告哪一個比較好?
extension UIView {
func addSubview(_ view: UIView)
func add(subview: UIView)
}
複製程式碼
- 下面的宣告可能引發什麼問題?
struct Array {
public mutating func append(_ newElement: Element)
public mutating func append(_ newElements: S)
where S.Generator.Element == Element
}
複製程式碼
- 下面哪一個命名是正確的:
struct Model {
var sourceURL: URL
var sourceUrl: URL
}
複製程式碼
綜合題