如果用户未登录,我有一个 LoginView 显示一个 RegisterView,如果他登录则显示一个 ContentView:
struct LoginView: View {
@EnvironmentObject var userManager: UserManager
var body: some View {
Group {
if userManager.isRegistered {
ContentView()
} else {
RegisterView()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
ContentView具有三个ObservedObject属性,使用组合从带有其余 api 的服务器获取内容。
struct ContentView: View {
@EnvironmentObject var userManager: UserManager
@ObservedObject var usersStore = UsersStore()
@ObservedObject var rolesStore = RolesStore()
@ObservedObject var elementsStore = ElementsStore()
var body: some View {
NavigationView {
ZStack {
Image("stell")
.resizable()
.aspectRatio(contentMode: .fit)
.opacity(0.1)
VStack(alignment: .leading, spacing: 5) { …Run Code Online (Sandbox Code Playgroud) 我有这个应用程序结构,我需要使用 userManager 初始化appearancesStore 和behaviorsStore。但我收到错误Escaping auto closure captures mutating 'self' parameter并且Variable 'self.appearancesStore' captured by a closure before being initialized.
我尝试了一些不同的方法来做到这一点,但都失败了。有人建议如何做到这一点吗?
@main
struct DuneApp: App {
@StateObject var userManager = UserManager()
@StateObject var appearancesStore: AppearancesStore
@StateObject var behavioursStore: BehavioursStore
init() {
_appearancesStore = StateObject(wrappedValue: AppearancesStore(manager: self.userManager))
_behavioursStore = StateObject(wrappedValue: BehavioursStore(manager: self.userManager))
}
var body: some Scene {
WindowGroup {
AuthenticateView()
.environmentObject(userManager)
.environmentObject(appearancesStore)
.environmentObject(behavioursStore)
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个简单的模型索赔:
struct Claim: Codable, Identifiable {
let id: String
var name: String
var isSelected: Bool? = nil // used for selecting claims in a list
}
Run Code Online (Sandbox Code Playgroud)
该AddClaimView是用于滤除已存储在权利要求中role.claims,并且呈现它们在用于用户的列表来选择用于添加到role。
struct AddClaimView: View {
var claims: [Claim] // all possible claims
@Binding var role: Role
var claimsForAdding: [Claim] {
self.claims.filter { claim in
!self.role.claims.contains(claim)
}
}
var body: some View {
VStack {
Text("Add claim")
.font(.largeTitle)
ClaimsListRows(claims: self.claimsForAdding.sorted())
}
}
}
Run Code Online (Sandbox Code Playgroud)
过滤是由计算属性完成的claimsForAdding,问题来了。我怎么能计算属性绑定claimsForAdding到@Binding var claims …
我的 sam 函数中有以下模板:
Resources:
TagChangedFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: tag_changed_function
Handler: tag_changed/app.lambda_handler
Runtime: python3.8
Policies:
- VPCAccessPolicy: {}
- Statement:
- Sid: EC2DescribeInstancesPolicy
Effect: "Allow"
Action:
- ec2:DescribeInstances
Resource: '*'
VpcConfig:
SubnetIds:
- sg-061328bxxxxx
SecurityGroupIds:
- subnet-03afd77xxxxx
Events:
TagChanged:
Type: CloudWatchEvent
Properties:
Pattern:
source:
- aws.tag
detail-type:
- Tag Change on Resource
Run Code Online (Sandbox Code Playgroud)
(我用 xxxxx 屏蔽了模板中的SubnetIds和)。SecurityGroupIds
但是当我构建并尝试将代码上传到 aws 时,我收到以下错误消息:
2 validation errors detected: Value
'[subnet-061328bxxxxx]' at
'vpcConfig.securityGroupIds' failed to satisfy
constraint: Member must satisfy constraint: [Member must
have …Run Code Online (Sandbox Code Playgroud) 我正在将我的项目从swift 2转换为swift 3,我很难理解以下函数的错误:
override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
var attributes = [UICollectionViewLayoutAttributes]()
if self.itemAttributes != nil {
for section in self.itemAttributes {
let filteredArray = (section as AnyObject).filtered(
using: NSPredicate { (evaluatedObject, bindings) -> Bool in
return rect.intersects(evaluatedObject.frame)
}
) as! [UICollectionViewLayoutAttributes]
attributes.append(contentsOf: filteredArray)
}
}
return attributes
}
Run Code Online (Sandbox Code Playgroud)
self.itemAttributes 是一个类属性,定义为:
var itemAttributes : NSMutableArray!
sectionAttributes 设置在另一个功能:
override func prepare() {
if self.collectionView?.numberOfSections == 0 {
return
}
if (self.itemAttributes != nil && self.itemAttributes.count > 0) { …Run Code Online (Sandbox Code Playgroud)