【发布时间】:2022-01-05 03:01:14
【问题描述】:
我有这样的代码:
class A{}
class B: A{
var val = 1
}
class C: A{
var num = 5
}
extension Optional where Wrapped == [B?]{
var vals: [B]{
var result = [B]()
if let arr = self{
for part in arr{
if let val = part{
result.append(val)
}
}
}
return result
}
}
extension Optional where Wrapped == [C?]{
var vals: [C]{
var result = [C]()
if let arr = self{
for part in arr{
if let val = part{
result.append(val)
}
}
}
return result
}
}
var one: [B?]? = [B()]
var two: [C?]? = [C(), nil]
print(one.vals.count)
print(two.vals.count)
这是优化后的:
合二为一,用于 B(A 的子类)和 C(A 的子类)
extension Optional where Wrapped: Collection{
var vals: [A]{
var result = [A]()
if let arr = self{
for part in arr{
if let val = part as? A{
result.append(val)
}
}
}
return result
}
}
现在问题来了,
对于以下情况,
如何进行优化?
print(one.vals.first?.val ?? "")
print(two.vals.first?.num ?? "")
我猜,我需要一个函数来返回对象的真实类型
PS:我知道,要处理数据,结构与协议完美搭配
虽然这是一个公司项目,但我是新人
【问题讨论】: