我想在没有任何数据的情况下初始化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?
答案 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来初始化变量。