相关疑难解决方法(0)

如何判断变量是否为数组

我有一个接受Any的Swift函数,我希望它能够接受一个字符串数组,一个Ints数组,一个混合数组或一个数组数组等.它也可以只接受一个String或一个Int,等,不在数组中.

所以我有这个:

    private func parse(parameter: Any) {
        if parameter is Int {
            // Int
        } else if (parameter is Float) || (parameter is Double) {
            // Double
        } else if parameter is String {
            // String
        } else if parameter is Bool {
            // Bool
        } else if let array = parameter as? [Any] {
            // Should catch all Arrays
        } else {
            assert(false, "Unsupported type") // [String] ends up here
        }
    }
Run Code Online (Sandbox Code Playgroud)

但如果我打电话parse(["Strings"]),断言就会被提出来.我怎样才能捕获所有类型的数组?

编辑 - 对于我想要完成的事情存在一些困惑.我基本上需要根据类型返回一个String,所以Int - …

arrays swift

8
推荐指数
2
解决办法
6452
查看次数

如何检查对象是否为集合?(迅速)

我广泛使用KVC构建满足应用程序需求的统一界面。例如,我的一个函数获取了一个对象,该对象仅基于字符串键字典进行几次检查。

因此,我需要一种方法来检查键对象是否为集合类型。

我希望能够进行一些协议检查(例如C#中的IEnumerable来检查它是否可以枚举),但是没有成功:

if let refCollection = kvcEntity.value(forKey: refListLocalKey) as? AnySequence<CKEntity> { ... }
Run Code Online (Sandbox Code Playgroud)

我也尝试过AnyCollection。

我知道我可以通过键入以下内容来迭代所有主要集合类型:

if let a = b as? Set { ...} // (or: if a is Set {...})
if let a = b as? Array { ...}
if let a = b as? Dictionary { ...}
Run Code Online (Sandbox Code Playgroud)

但这从继承/多态性的角度来看似乎不合适。

generics collections swift

5
推荐指数
1
解决办法
1029
查看次数

标签 统计

swift ×2

arrays ×1

collections ×1

generics ×1