相关疑难解决方法(0)

为什么整数不符合AnyObject协议?

为什么我可以有一个[AnyObject]数组并在其中放入一堆不同大小的类型...

var a = [AnyObject]()
a.append(Int(1))
a.append(Float64(3.14))
a.append(Bool(true))
Run Code Online (Sandbox Code Playgroud)

...除了Int32Int64....

a.append(Int32(1)) // err: type 'Int32' does not conform to protocol 'AnyObject'
a.append(Int64(1)) // err: type 'Int64' does not conform to protocol 'AnyObject'
Run Code Online (Sandbox Code Playgroud)

文档AnyObject说:

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

但是当我命令点击Int,Int32或者Int64看到这些类型的标准库定义时,我发现它们都是struct值.

这里的根本问题是什么?为什么这样设计?

swift

17
推荐指数
1
解决办法
4535
查看次数

在UserDefaults中存储Int64

我像这样定义我的字典:

var teamsData = Dictionary<String,Dictionary<String,Int64>>()
Run Code Online (Sandbox Code Playgroud)

然后,我试图将其存储在userdefaults中:

NSUserDefaults.standardUserDefaults().setObject(teamsData, forKey: "teamsData")
Run Code Online (Sandbox Code Playgroud)

但它会抛出错误:

Type Dictionary<String,Dictionary<String,Int64>> does not conform to protocol 'Any Object'
Run Code Online (Sandbox Code Playgroud)

xcode dictionary nsuserdefaults swift

14
推荐指数
3
解决办法
4246
查看次数

对于(U)Int8/16/32/64类型,是否可以将Swifts自动数值桥接复制到Foundation(NSNumber)?

  • 是否有可能复制雨燕数值桥接基金会:■ NSNumber引用类型,例如Int32,UInt32,Int64UInt64类型?具体来说,复制下面介绍的自动按配置桥接.

此类解决方案的示例用法:

let foo : Int64 = 42
let bar : NSNumber = foo
    /* Currently, as expected, error:
       cannot convert value of type 'Int64' to specified type 'NSNumber */
Run Code Online (Sandbox Code Playgroud)

背景

一些原生的Swift数(值)类型可以自动桥接到NSNumber(引用)类型:

迅数字结构类型的实例,例如Int,UInt, Float,Double,和Bool,不能由来表示 AnyObject类型,因为AnyObject仅代表一个类类型的实例.但是,Foundation启用桥接时,可以将Swift数值分配给常量和AnyObject类型的变量 作为类的桥接实例NSNumber.

...

雨燕自动填补某些本地号码类型,如IntFloat,对NSNumber.此桥接允许您NSNumber从以下类型之一创建 : …

nsnumber swift swift2

6
推荐指数
1
解决办法
688
查看次数

将[Int64]的Swift数组转换为NSArray

我想斯威夫特的数组转换Int64NSArrayNSNumber价值观.

@interface A : NSObject
- (void)bar:(NSArray *)tips;
@end
Run Code Online (Sandbox Code Playgroud)

Swift类继承了这个Objective-C类:

class B : A {
    func foo(tips : [Int64]) {
        self.bar(tips)
    }
}
Run Code Online (Sandbox Code Playgroud)

Swift代码无法编译时出现以下错误:

Type '[Int64]' does not conform to protocol 'AnyObject'
Run Code Online (Sandbox Code Playgroud)

我怎么能转换[Int64]NSArrayNSNumber实例?

PS我尝试了很多东西,找不到一个简单的方法来做到这一点:

self.bar(NSArray(array: tips))
self.bar(tips as NSArray)
Run Code Online (Sandbox Code Playgroud)

编辑:这个问题涉及不涉及试图建立新NSArray的独立的Int64对象,但现有的数组转换[Int64]NSArray

arrays interop objective-c ios swift

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