有沒有必要,以避免斯威夫特Array
。
它與NSArray
這兩個方向橋接,因此對於更多類型安全的代碼,最好使用Swift數組完成工作,並且只在需要與ObjC API進行互操作時進行橋接。 (在大部分進口的API,雨燕自動轉換NSArray
到[AnyObject]
,所以你甚至都不需要經常彌合。)
假設persons
陣列是[AnyObject]
你從其他API了,你可以減少對首先鑄造陣列相對於其他類型的答案鑄造量:
let sortedPersons = sorted(persons as [Person]) { $0.name < $1.name }
// sortedPersons has inferred type [Person]
此外,由於您使用的是比較塊只排序您Person
類的特定屬性,你可以做的更好,以使用排序描述符:
let sortedPersons = (persons as NSArray).sortedArrayUsingDescriptors([
NSSortDescriptor(key: "name", ascending: true)
])
(該persons as NSArray
部分可能不是必要的,如果persons
從ObjC API來了。)
根據Person
類是如何實現的,與描述排序可以產生在後端更有效的排序。例如,如果它是一個核心數據管理對象,則使用描述符排序可能會產生一個SQL查詢,該查詢在數據庫中執行得很快,並且使用很少的內存,而使用比較器閉包進行排序需要實例化數據庫中的每個對象,以評估每個對象。
'NSComparisonResult'現在'ComparisonResult'。 – ThomasW 2018-02-19 05:27:11