高级功能 01 范型类型
当我们在Swift中构建与其他类型交互的东西时,我们通常会指定我们要直接交互的类型。这是很有用的,因为它意味着我们知道该类型所具有的功能; 我们可以使用这些功能,并确保输出具有正确的类型。但是,我们现在有了一个只能与指定类型交互的构造;它不能与其他t一起重用 是,即使概念是相同的。
泛型使我们有一个定义的类型,同时一般适用于其他类型。也许,它最好用一个例子来说明。
实战需求
我们将创建一个自定义集合对象,该对象将存储用户复制的最后五个字符串,以便它们不仅可以粘贴复制的最后一个字符串,还可以粘贴最后五个字符串中的任何一个。你可以添加stri 注册到列表中,并要求列表中的所有字符串,这将返回最新的到最古老的:
class RecentList {
var slot1: String?
var slot2: String?
var slot3: String?
var slot4: String?
var slot5: String?
func add(recent: String) {
// Move each slot down 1
slot5 = slot4
slot4 = slot3
slot3 = slot2
slot2 = slot1
slot1 = recent
}
func getAll() -> [String] {
var recent = [String]()
if let slot1 = slot1 {
recent.append(slot1)
}
if let slot2 = slot2 {
recent.append(slot2)
}
if let slot3 = slot3 {
recent.append(slot3)
}
if let slot4 = slot4 {
recent.append(slot4)
}
if let slot5 = slot5 {
recent.append(slot5) }return recent
}
}
let recentlyCopiedList = RecentList()
recentlyCopiedList.add(recent: "First")
recentlyCopiedList.add(recent: "Next")
recentlyCopiedList.add(recent: "Last")
var recentlyCopied = recentlyCopiedList.getAll()
print(recentlyCopied)
// Last, Next, First
解决方案
1. 修改“记录列表”对象以定义通用类型列表列表类型,我们使用它代替字符串:
class RecentList<ListItemType> {
var slot1: ListItemType?
var slot2: ListItemType?
var slot3: ListItemType?
var slot4: ListItemType?
var slot5: ListItemType?
func add(recent: ListItemType) {
// Move each slot down 1
slot5 = slot4
slot4 = slot3
slot3 = slot2
slot2 = slot1
slot1 = recent
}
func getAll() -> [ListItemType] {
var recent = [ListItemType]()
if let slot1 = slot1 {
recent.append(slot1)
}
if let slot2 = slot2 {
recent.append(slot2)
}
if let slot3 = slot3 {
recent.append(slot3)
}
if let slot4 = slot4 {
recent.append(slot4)
}
if let slot5 = slot5 {
recent.append(slot5)
}
return recent
}
}
2. 在创建记录列表时,请提供一个指定的类型,字符串,它将用于替换此记录列表实例的泛型类型:
let recentlyUsedWordList = RecentList<String>() recentlyUsedWordList.add(recent: "First") recentlyUsedWordList.add(recent: "Next") recentlyUsedWordList.add(recent: "Last") var recentlyUsedWords = recentlyUsedWordList.getAll() print(recentlyUsedWords) // Last, Next, First
3. 创建一个简单的人员对象:
class Person {
let name: String
init(name: String) {
self.name = name
}
}
4. 创建一些人来添加到我们最近的联系人列表中:
let rod = Person(name: "Rod")
let jane = Person(name: "Jane")
let freddy = Person(name: "Freddy")
5. 创建一个新的历史记录列表,并提供特定的人员类型:
let lastCalledList = RecentList<Person>()
6.将人员对象添加到此列表中:
lastCalledList.add(recent: freddy)
lastCalledList.add(recent: jane)
lastCalledList.add(recent: rod)
7. 获取列表中的所有人员,由于这是键入的人员对象数组,请打印他们的名称属性:
let lastCalled = lastCalledList.getAll()
for person in lastCalled {
print(person.name)
}
// Rod
// Jane
// Freddy
我们现在有一个通用的记录列表类,我们已经使用了字符串和一个自定义的人类。
精品教程推荐
加入我们一起学习SwiftUI
QQ:3365059189
SwiftUI技术交流QQ群:518696470
教程网站:www.openswiftui.com