swift - 过滤任何类型的可变参数
问题描述
我有以下类和构造函数:
class List<T> {
var value: T
var next: List<T>?
init(_ items: Any...) {
}
构造函数可以接受以下内容:
let list = List<Any>(List<Int>(7, 2), 6, List<Any>(3, List<Int>(5, 1)))
我在构造函数中的目标是按特定顺序过滤掉数字 7,2,6,3,5,1,当然它们可以是字符串,因为它是一个模板。我试过的是
init(_ items: Any...) {
for info in items
{
if let str = info as? T {
if let str2 = info as? List<T> {
}
else
{
print("this is primitive \(info)")
}
}
}
但是结果我得到:
this is primitive 7
this is primitive 2
this is primitive 5
this is primitive 1
this is primitive 3
this is primitive main.List<Swift.Int>
this is primitive main.List<Swift.Int>
this is primitive 6
所以我似乎没有过滤掉 main.List 也没有按顺序过滤,有什么想法可以实现吗?
解决方案
首先,处理可变参数的顺序似乎不是顺序的,而是像递归调用一样,init(_ items: Any...)
所以我认为你不能得到你想要的顺序。
关于 main.list 是原语的打印来自调用
init(3, List<Int>(5, 1)
其中 T 是 Any 和 3,List 对象都是 T 的一个实例。如果您将 print 添加为init
print(items)
下面是我的init测试版本
init(_ items: Any...) {
print(items)
for item in items {
switch item {
case is List<T>:
print("Is list")
case is T:
print("Primitive \(item)")
default:
print("Other stuff")
}
}
}
推荐阅读
- sql - SQL Server 将 DATEDIFF 的累积 SUM 转换为百分比
- node.js - 国际教育基金会。TypeError: require(...)(...) 不是函数
- matlab - 圆形区域内函数的渐变填充Matlab
- php - Ajax 调用返回一个空对象数组
- python - 在 PyInstaller 中使用自定义修改的规范文件生成一个文件可执行文件
- keycloak - 是否可以在 Keycloak 中为每个用户添加多个电子邮件?
- jquery - 为什么`each`不迭代jQuery对象?
- javascript - 在纯纯 JavaScript 无 CSS 中反转 div 的顺序
- api - Magento soap api shoppingCartCreate 与 quote_currency_code 参数
- excel - VBA查找#N/A值并将相邻单元格复制到另一个工作表并循环