当前位置:  开发笔记 > IOS > 正文

如何在Swift中将RealmOptional转换为Int或Float?

如何解决《如何在Swift中将RealmOptional转换为Int或Float?》经验,为你挑选了1个好方法。

我想将定义为RealmOptional或者的类型转换为Int或者Float,取决于分配给泛型的类型.然而,当我尝试使用它们分发switch声明,原来不是RealmOptional(),但RealmOptional()被归类到Int的情况.例如,

switch value { // value is of type AnyObject?
    case is String:
        cell.valueLabel.text = value as? String
    case is Int:
        // RealmOptional are executed here
        let v = value as! Int
        cell.valueLabel.text = String(v) // Float is now treated as Int
    case is Double:
        print("double") // not printed at all 
        cell.valueLabel.text = String(value!)
    default:
        break
}

为什么RealmOptional()表现得像Int这里一样?如何将文本设置为value正确?



1> dfri..:

让我们假设您的RealmOptional()变量已命名myFloat.然后,使用的RealmOptional,吸气:S(见的境界这个混帐项)潜在价值,.value而再检查RealmOptional本身:

var value = myFloat.value // value variable now of type Float

下面说明并说明AnyObject?开关不按预期运行的原因:

从苹果语言指南 - 类型转换:

为Any和AnyObject键入Casting

Swift提供了两种特殊类型的别名,用于处理非特定类型:

AnyObject可以表示任何类类型的实例.

Any可以表示任何类型的实例,包括函数类型.

因此,AnyObject类型可以可容纳任何类型的实例,但根本数值类型(Int,Double等)在夫特是类型的,而是结构类型.

switch你的榜样,该AnyObject实例未推断,但的第一个可能成功的垂头丧气,这将是无论case你把最上面的是一个数字式的.因此,如果您case在交换机中更改了:s 的顺序,则转换将更改.

let value: AnyObject? = 30.0
// try change the order
switch value {
case is String: print("string");
case is Float: print("float"); // hits `Float` downcast first -> prints float
case is Int: print("int");
default: print("other")
}

但是,现在,您可以将您AnyObject转换为NSNumber(类实例),并从那里继续.从使用Cocoa数据类型文档:

Swift数值结构类型的实例(如Int,UInt,Float,Double和Bool)不能由AnyObject类型表示,因为AnyObject仅表示类类型的实例.但是,当启用桥接到Foundation时,可以将Swift数值赋值为AnyObject类型的常量和变量,作为NSNumber类的桥接实例.

然而要注意NSNumber从斯威夫特数字类型(本质上的区别Int,Double在于前者等)持有任何种类的数量,并允许我们投这个号码,以不同类型的数字类型的.但是,我们不能轻易地推断出NSNumber应该转换特定实例的类型,但是我们可以实现我们自己的(不那么漂亮)规范,如何推断NSNumber不同的swift基本数字类型.

但是,在继续进行NSNumber黑客攻击之前:

从上面来看,核心问题是你的value财产属于类型AnyObject?.你能否发布导致value类型的代码AnyObject?.如果使用RealmOptional的getter(因此不需要转换为?),如果没有必要Int,可能会进行转换,Float等等.RealmOptional()AnyObject?

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有