初始化字典没有数据的文字

时间:2018-11-06 11:06:25

标签: swift dictionary

我想在没有任何数据的情况下初始化Swift DictionaryLiteral对象。

例如:

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
from cebula import routing


application = ProtocolTypeRouter({
    # (http->django views is added by default)
    'websocket': AuthMiddlewareStack(
        URLRouter(
            routing.websocket_urlpatterns
        )
    ),
})

但是,这会产生错误from channels.auth import AuthMiddlewareStack from channels.routing import ProtocolTypeRouter, URLRouter from cebula import routing application = ProtocolTypeRouter({ # (http->django views is added by default) 'websocket': AuthMiddlewareStack( URLRouter( routing.websocket_urlpatterns ) ), })

但是如果我直接对数据做同样的事情,它会起作用:

ws://127.0.0.1:8000/ws/test/

其背后的原因是什么? 以及如何声明一个空变量DictionaryLiteral?

2 个答案:

答案 0 :(得分:2)

var withoutData: DictionaryLiteral<String, [RealmObject]> = [:]

答案 1 :(得分:2)

在第一个示例中,您正在创建一个Dictionary,然后尝试使用它初始化一个DictionaryLiteral。它们是两种不同的类型,因此会出现错误。您可以使用()创建DictionaryLiteral,但必须正确指定要创建的类型。由DictionaryLiteral指定使用String作为键并使用[RealmObject]作为值的DictionaryLiteral<String, [RealmObject]>

在第二个示例中,您将提供实际的字典文字,因此Swift可以将类型推断为DictionaryLiteral<String, [RealmObject]>。实际上从未创建过Dictionary

创建空DictionaryLiteral的一种方法是在创建时完全指定类型,并让Swift推断变量类型:

var withoutData = DictionaryLiteral<String, [RealmObject]>()

另一种方法是完全指定变量的数据类型,然后使用空字典文字[:]初始化为JonJ shows in his answer来初始化变量。