小编Iva*_*old的帖子

在 ObservableObject 中引用 EnvironmentObject

如果用户未登录,我有一个 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)

swiftui combine observableobject

6
推荐指数
1
解决办法
647
查看次数

使用另一个 StateObject 初始化 StateObject

我有这个应用程序结构,我需要使用 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)

swiftui

4
推荐指数
1
解决办法
1490
查看次数

如何在 SwiftUI 中绑定计算属性

我有一个简单的模型索赔:

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 …

binding swiftui

3
推荐指数
1
解决办法
3772
查看次数

SubnetIds 和 SecurityGroupIds 的 Lambda 模板失败

我的 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)

aws-lambda aws-sam-cli

2
推荐指数
1
解决办法
8394
查看次数

swift 2中的layoutAttributesForElements函数给出了错误警告

我正在将我的项目从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)

uicollectionviewlayout swift3

0
推荐指数
1
解决办法
3454
查看次数