我遇到这样的问题:我无法使用“自我”在我的班级中展示动态UIViewController。它告诉我“类型'(LoginScreenVC)->()->(LoginScreenVC)'的值没有成员'view'”。
使用闭包(例如TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
,但是由于要切换到的UIViewController是动态的,因此我无法将其强制转换为特定的UIViewController。
还有其他显示ViewController的方法吗?
这是我的代码:
SWIFT 4.2 / XCode 10.1
if let loginScreen = UIStoryBoard ...
答案 0 :(得分:2)
您在说:
let handlerBlock: (String) -> Void = { redirect in
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let loginScreen = storyboard.instantiateViewController(withIdentifier: redirect)
self.present(loginScreen, animated: true, completion: nil)
}
问题是您在没有self
的情况下使用术语self
。 (好吧,有一个self
,但这不是您想的。)present
是一个UIViewController实例方法,因此self
必须是一个UIViewController实例;在这种情况下,不是。
我可以想出六种方法来表达您想要表达的东西,但是最简单的方法可能是将其重写为:
func handlerBlock(_ redirect:String) -> Void {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let loginScreen = storyboard.instantiateViewController(withIdentifier: redirect)
self.present(loginScreen, animated: true, completion: nil)
}
现在handlerBlock
是一个 instance方法,而self
是有意义的-它就是实例,这正是您想要的。其余代码保持不变,因为表达式handlerBlock
中的裸名requestToken(success: handlerBlock)
是一个函数名,就像以前一样。