【发布时间】:2019-11-01 11:20:23
【问题描述】:
我一直在尝试使用 Swift UI 为 iOS 13 制作应用程序,但我不断收到这个奇怪的错误:“对成员 'buildBlock()' 的模糊引用”。
无论我做什么,错误都不会消失。
我尝试一次对代码段进行注释,以查看可能导致问题的部分,但唯一有效的方法是注释掉整个视图。
我已尝试清理我的构建文件夹并删除派生数据。我也试过多次重启我的电脑和Xcode,都没有解决。
我很确定这只是一个 Xcode 错误,但肯定有它的存在,如果有人能告诉我那是什么,我将不胜感激。
var body: some View {
GeometryReader { geometry in {
VStack {
Button (action: self.editProfilePicture) {
Image(ImageNames.AccountIconImageName, bundle: Bundle.main)
.resizable()
.frame(width: geometry.size.width / SizeConstants.AccountIconSizeDiviser, height: geometry.size.width / SizeConstants.AccountIconSizeDiviser)
.padding()
.background(ColorConstants.VeryLightGrayColor)
.clipShape(Circle())
}
.accentColor(.white)
.padding(.bottom, LargePadding)
ScrollView (showsVerticalIndicator: false) {
let const: Length? = geometry.size.width - SizeConstants.FullNameTextFieldWidthReduction
TextBox(textBinding: self.$fullName, placeHolder: Text(Strings.FullNameString), editChanged: self.fullNameChanged)/*.padding(.bottom, SmallPadding)*/.frame(width: const)
TextBox(textBinding: self.$username, placeHolder: Text(Strings.UsernameString), editChanged: self.usernameChanged)//.padding(.bottom)
Text(verbatim: Strings.ChooseIdType).font(.footnote).color(.gray)
TextBox(textBinding: self.$phoneNumber, placeHolder: Text(Strings.PhoneNumberString), editChanged: self.phoneNumberChanged)//.padding(.bottom, SmallPadding)
TextBox(textBinding: self.$emailAddress, placeHolder: Text(Strings.EmailAddressString), editChanged: self.emailAddressChanged)//.padding(.bottom)
Spacer(minLength: PaddingConstants.FirstSignupSpacerMinSize)
TextBox(textBinding: self.$password, placeHolder: Text(Strings.PasswordFieldPlaceHolder), editChanged: self.signupPasswordChanged)//.padding(.bottom, SmallPadding)
TextBox(textBinding: self.$confirmPassword, placeHolder: Text(Strings.ConfirmPasswordString), editChanged: self.confirmPasswordChanged)//.padding(.bottom)
Spacer(minLength: PaddingConstants.SecondSignupSpacerMinSize)
Button (action: self.signup) {
Text(Strings.CreateAccountString).color(.white).font(Font.system(size: SizeConstants.LoginButtonFontSize))
}
.padding(EdgeInsets(top: PaddingConstants.CreatAccountButtonVerticalPadding,
leading: PaddingConstants.CreateAccountButtonSidePadding,
bottom: PaddingConstants.CreatAccountButtonVerticalPadding,
trailing: PaddingConstants.CreateAccountButtonSidePadding))
.background(LeznoBlue)
.clipShape(RoundedRectangle(cornerRadius: SmallCornerRadius))
Spacer(minLength: PaddingConstants.ThirdSignupSpacerMinSize)
Text(Strings.AgreementString)
HStack {
Button (action: {}) {
Text(Strings.TermsString)
}
Text(Strings.AndString)
Button (action: {}) {
Text(Strings.PrivacyString)
}
}
}
}
.padding()
}
}
编辑:
事实证明,我忘记了在视图构建器闭包中最多只能有 10 个视图,而我拥有的不止这些。只需将它们分组以减少查看次数即可解决错误。
事实证明,Xcode 显示的错误非常具有误导性。
感谢哈米什指出
【问题讨论】:
-
您能否提供一个最低可验证的示例?如果仅使用一个空视图就可以重现这一点,那么请使用它作为您的示例,并显示此变量声明发生的上下文。
-
另外,如果
vody是指body,那么请说出来。仅显示真实代码。 -
请正确格式化您的代码。你的缩进在这里全错了。
-
我可以看到的一个问题是您超出了 ViewBuilder 的 10 个子视图限制 - 尝试使用
Group { /*10 subviews here*/ } Group { /*up to 10 more views*/ },如中途 stackoverflow.com/a/56435128/2976878 所示。 -
考虑将您的代码提取成更小的部分,例如
EditProfileButton、NameInformationView、CredentialsView等等,而不是盲目地将项目 10 到 10 分组。
标签: swift xcode swiftui ios13 swift5.1