首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift 2:闭包数组字典

Swift 2:闭包数组字典
EN

Stack Overflow用户
提问于 2016-01-31 17:27:37
回答 1查看 246关注 0票数 1

我需要将字符串字典定义为键,将闭包数组定义为值。样本结构:

代码语言:javascript
复制
{
    "url1 hash": [loadHandler1, loadHandler2],
    "url2 hash": [loadHandler1],
    "url3 hash": [loadHandler1, loadHandler2, loadHandler3],    
    ...
}

加载处理程序是简单的闭包:() -> NSData?

这段代码编译时没有错误。

代码语言:javascript
复制
let test1: [String: [String]] = [String: [String]]()

typealias Handler = () -> NSData? //workaround
let test2: [String: [Handler]] = [String: [Handler]]()

let test3: [() -> NSData?] = []

代码语言:javascript
复制
let test4: [String: [() -> NSData?]] = [String: [() -> NSData?]]()

在'()‘和“容器文本中的预期表达式”之后给出“预期的”、“分隔符”。

代码语言:javascript
复制
let test5: [String: [() -> NSData?]] = [String: []]()

提供“类型表达式在没有更多上下文的情况下是歧义的”

为什么我在最后两个例子中出现了错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-31 17:46:24

test4中,您会得到该错误,因为()是一个完整的类型:空元组(即Void ),要声明该类型为() -> NSData?,可以使用括号作为

代码语言:javascript
复制
let test4: [String: [(() -> NSData?)]] = [String: [(() -> NSData?)]]()

或者更好的你的typealias

test5中获得的错误是test4中相同错误的直接影响:由于编译器无法正确理解变量的类型,因此无法推断要创建并分配给test5的数组([])的类型。

更新:在对一个操场进行了一些测试之后,我发现编译器在创建数组/字典时理解闭包类型存在一些问题,但是可以使用用于该类型的相同声明。编译器对

代码语言:javascript
复制
let test3: [() -> NSData?] = []
let test4: [String: [() -> NSData?]] = [:]

但是,如果我们不声明类型并让它从数组/字典中推断它,那么它就不能编译:

代码语言:javascript
复制
let test3 = [() -> NSData?]()
let test4 = [String: [() -> NSData?]]()

即使用圆括号包装闭包的签名也不起作用。我觉得是个漏洞,你应该提交报告。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35116877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档