我目前正在学习SwiftUI,想开发自己的应用程序。我设计了一个loginview
和一个loginhandler
,它们应该处理登录背后的所有逻辑。当用户输入错误的用户名/密码时,屏幕上应该会出现一个警报。我用状态变量loginerror
解决了这个问题。但现在出现了棘手的部分,因为我想将这个变量的绑定传递给loginhandler
中的登录函数。看一下下面的代码:
import SwiftUI
struct LoginView: View
{
@EnvironmentObject var loginHandler: LoginHandler
@State private var username: String = ""
@State private var password: String = ""
@State private var loginError: Bool = false
...
private func login()
{
loginHandler.login(username: username, password: password, error: $loginError)
}
}
我现在正在尝试更改登录函数中的错误值:
import Foundation
import SwiftUI
class LoginHandler: ObservableObject
{
public func login(username: String, password: String, error: Binding<Bool>)
{
error = true
}
}
但我发现了错误
无法赋值:“error”是“let”常量
我认为这是有意义的,因为你不能在Swift中编辑参数。我还尝试过_error=true
,因为我曾经看到下划线与绑定结合使用,但这也不起作用。
但后来我想到了一个工作解决方案:error.wrappedvalue=true
。我唯一的问题是苹果开发人员文档中的以下语句:
此属性提供对值的数据的主要访问。但是,您不直接访问wrappedValue。取而代之的是,使用与@binding属性一起创建的property变量。
虽然我超级高兴它起作用了,但我想知道有没有更好的办法来解决这种情况呢?
我知道你想做什么,但它会在后面引起问题,因为你在这里处理的是状态。现在一个解决办法是:
错误
抽象到类中,但这样就会将用户名
和密码
放在一个位置,而将错误放在另一个位置。理想的解决方案是在同一地点把它全部抽象化。从您的视图中删除所有属性,并将其设置为如下所示:
import SwiftUI
struct LoginView: View
{
@EnvironmentObject var loginHandler: LoginHandler
// login() <-- Call this when needed
...
}
那么在你的课堂上:
import Foundation
import SwiftUI
@Published error: Bool = false
var username = ""
var password = ""
class LoginHandler: ObservableObject
{
public func login() {
//If you can't login then throw your error here
self.error = true
}
}
您唯一要做的是更新username
和password`,例如,您可以通过以下操作来完成
TextField("username", text: $loginHandler.username)
TextField("username", text: $loginHandler.password)
你也可以更新一个函数的参数,这里是一个例子,这不是使用绑定或状态,它是inout!
我现在正在尝试更改登录函数中的错误值:
无法赋值:“error”是“let”常量
所以用这个方法或例子你可以!
struct ContentView: View {
@State private var value: String = "Hello World!"
var body: some View {
Text(value)
.padding()
Button("update") {
testFuction(value: &value)
}
}
}
func testFuction(value: inout String) {
value += " updated!"
}
我刚刚开始学习React和JavaScript。在我阅读了留档和教程之后,我看了一下示例项目,并试图整理我还没有得到的内容。 然后我看到有一些函数是在函数内部定义的,还有一些函数是在函数外部定义的。 例如,在之外: 和内部render()。。。 为什么它们看起来如此不同,为什么你想在内部和外部有一些函数? 编辑: 之外的函数的另一个示例: EDIT2:在另一个线程中,有人回答说,如果函数背后的逻辑
我正在尝试通过与分支内联的am调用c中的外部函数。我正在编译为arm m0指令集,但它返回错误表达式。 代码是: 回报是: 我们需要做什么?
严格说来,Ruby中没有函数.但Kernel模块中定义的方法(可以在任何地方用做函数,因此)可被其他语言当做函数来调用.若您对这些方法进行再定义时,就必需考虑到对其他方面的影响. `str 把字符串str当做外部命令来运行,并以字符串方式返回命令的输出.使用`str`形式来调用该方法(还可以使用%x(...)表示法进行调用.请参考命令输出). 可以使用$?来了解命令的结束状态. 若您只想执行命令,
问题内容: 我有一些代码,其结构类似于此 问题是它向我吐了一个错误。 解析错误:语法错误,意外的T_LNUMBER,预期的T_VARIABLE或’$’ 有关于如何在bbcode函数的preg_replace内调用embed_video的想法吗? 谢谢! 问题答案: 您可以在上使用“ e”修饰符(请参见模式修饰符) 告诉将第二个参数视为PHP代码。
问题内容: 我对所有页面都有一个通用模板,其中包含一个菜单栏,它位于.bar的外面。我位于其中一个页面的内部,我想将输入数据绑定到此模板区域(该区域位于与输入页面不同的控制器下) )。我的意思是当我输入名称时,该名称将出现在模板区域。可以吗?这是the **** 问题答案: 通过遵循始终具有“’ ”的“最佳实践”,可以很容易地避免使用基元出现此问题。在您的ng模型中 -观看3分钟值得。Misko演
本文向大家介绍layui.use模块外部使用其内部定义的js封装函数方法,包括了layui.use模块外部使用其内部定义的js封装函数方法的使用技巧和注意事项,需要的朋友参考一下 用途:常用于监听输入框(其内部不提供监听函数)。 用法:需要在 use 中定义 window 函数供外部引用。 以上这篇layui.use模块外部使用其内部定义的js封装函数方法就是小编分享给大家的全部内容了,希望能给大