小编ali*_*ego的帖子

session.dataTask是异步快速的吗?

我正在使用以下代码向服务器发出请求:

let configuration = URLSessionConfiguration.default
let session = URLSession(configuration: configuration)
let dataTask = session.dataTask(with: request as URLRequest) { (data, response, error) in
     if error != nil {
          DispatchQueue.main.async(execute: {
              completion(nil, error as NSError?)
          })
          return
     }
     DispatchQueue.main.async(execute: {
          code...
     })    
}
dataTask.resume()
Run Code Online (Sandbox Code Playgroud)

从我阅读的内容来看,这不应该阻塞主线程,但它似乎只是在这样做。分派到另一个线程后是否需要调用此代码?即:

DispatchQueue.global(qos: DispatchQoS.QoSClass.userInitiated).async {

}
Run Code Online (Sandbox Code Playgroud)

还是dataTask本身是异步请求的,以便不阻塞主线程并将其分派到另一个线程将是多余的?

multithreading ios swift nsurlsessiondatatask

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

DynamoDB一对多和多对多结构

我对DynamoDB还是陌生的,并试图理解关系。

我有一个包含用户,列表和项目的待办事项应用程序。

我创建了3个dynamoDB表,一个用于用户,一个用于列表,一个用于项目。

为简单起见,以用户/列表为例。用户的主键是userId。列表主键是listId。用户可以有很多列表。列表可以在用户之间共享,因此列表可以有许多用户。

那么,列表应该作为listId的数组保存在用户项中吗?然后,当我得到一个用户时,我遍历listId的数组并获取所有列表?

用户可以有很多列表,而列表又可以有很多项目,因此我不想将整个列表保存在用户项目中。该列表也可以被许多用户共享。

我已经尝试搜索关系,但是它们似乎都是从读者对NOSQL数据库有广泛理解的假设开始的,而我没有。

amazon-web-services nosql amazon-dynamodb

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

如何删除 SwiftUI 中列表行的最小垂直填充或最小高度?

我试图向列表中添加一个非常短的行,框架高度为 2,但列表在列表项的上方和下方添加了不需要的填充,或者限制为最小高度,但我不知道如何删除它。我制作了以下内容来说明问题:

struct ContentView: View {
    var body: some View {
        List {
            Color.red
                .frame(height: 2)
            Color.blue
                .frame(height: 2)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如何删除列表项上方和下方的填充?如果使用节并添加页眉或页脚,则效果相同。它不允许我有一个框架高度较小的列表条目。

在 LazyVStack 中我没有这个问题,但我需要使用一个列表。

xcode list ios swiftui

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

如何知道何时在 .searchable 搜索窗口中点击了 SwiftUI 键盘搜索按钮

我在 SwiftUI 中使用 .searchable 修饰符。有没有办法知道用户何时按下键盘上的搜索键?我知道如何使用 UIViewRepresentable 和 searchController 来做到这一点。我想知道是否有一种 SwiftUI 方法可以使用 .searchable 修饰符来做到这一点

xcode searchable swift swiftui

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

在 SwiftUI 中,如何用另一个视图剪辑视图的一部分?

我试图在 SwiftUI 中重叠两个圆圈并在它们之间留出边距。我目前正在使用这种方法:

ZStack {
    Circle()
        .frame(width: 60, height: 60)
        .foregroundColor(Color.blue)
        .shadow(color: .black.opacity(0.5), radius: 4, x: 2, y: 2)
    ZStack {
        Circle()
            .frame(width: 26, height: 26)
            .foregroundColor(Color(.systemGray5))
        Circle()
            .frame(width: 22, height: 22)
            .foregroundColor(.blue)
    }
    .offset(x: 26, y: 17)
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

问题是,由于大圆上的阴影,我永远无法完美匹配小圆边框圆上的背景(即 systemGray5。所以虽然它看起来不错,但我只希望边距出现在不是一直围绕着较小的圆圈。

在插画或其他方式中,我会用我的 26 大小的圆圈剪辑大图像,它看起来就像从中被咬了一口。那么我就可以完美的达到这个效果了。

有没有办法在 SwiftUI 中剪掉我的大圆的底部?

xcode ios swiftui

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

过滤swift对象数组,以删除在其一个或多个属性中具有相同值的对象

我有一个coreData对象的Swift数组.对象有三个属性.我想过滤数组以删除对其中2个属性共享相同值的对象.

对象属性是object.name,object.age,object.id

所有属性都是String类型.

我想过滤数组以返回一个数组,删除重复的情况,其中object.name和object.age是相同的.

arrays xcode filter ios swift

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

如何使用swift API检查socket.io连接状态

我正在将 socket.io 与我的 swift iOS 应用程序一起使用。有时我的套接字连接会断开。

如何检查连接状态,以便在未连接时重新连接?我在客户端 API 文档中找不到任何用于检查连接状态的命令。

我正在使用带有 swift 4 的 iOS 11。

xcode ios socket.io swift

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

如何使用swift iOS(不使用UITextView)创建多行扩展UTextField或文本输入

查看Apple Messages应用程序的行为,似乎他们正在使用UITextField进行文本输入.

占位符的行为与光标出现在占位符文本的开头(基本上覆盖它)是我所基于的假设.我所知道的UITextView没有占位符.

我知道我可以轻松地使用UITextView并添加一个具有不同颜色的占位符,并在用户开始输入时代码占位符消失.但是我想知道是否有任何方法可以编程UITextField,它可以将其框架固定在宽度上并扩展高度包装文本.

xcode uitextfield ios swift

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

如何使用 SwiftUI 更改根视图

我想使用 SwiftUI 将一个视图替换为另一个视图。

目前,我使用 NavigationView 或 .sheet 转换到新视图,并且可以很好地堆叠视图。

但是我还没有找到一种方法可以用另一个视图完全替换一个视图。例如,当用户首次登陆应用程序时,它将提供登录或创建新帐户的选项。我希望任一选项都可以替换以前的视图,而不是显示在它之上。另一个示例是当用户注销应用程序时。我想关闭整个堆栈并替换为登录屏幕。不只是忽略所有叠加的观点。

与 swiftUI 之前的类比就是替换 rootView。

ios swiftui

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

在 SwiftUI 中设置视图的 ViewModel 的最佳方法是什么

我是 MVVM 世界的新手,想知道在呈现新视图时设置该视图的 ViewModel 属性的最佳方法是什么?

我尝试在呈现视图的 .fullScreenCover 中初始化 ViewModel 类,但这给我带来了各种各样的问题。这就是我所做的:

struct FirstView: View {
    @State var isActive = false
    var body: some View {
        Text("Tap here to go to SecondView")
            .onTapGesture {
                isActive = true
            }
            .fullScreenCover(isPresented: $isActive, content: {
                SecondView(viewModel: ViewModel(), isActive: $isActive)
            })
    }
    
}
struct SecondView: View {
    @ObservedObject var viewModel: ViewModel
    
    @Binding var isActive: Bool
    
    init(viewModel: ViewModel, isActive: Binding<Bool>) {
        self.viewModel = viewModel
        self._isActive = isActive
    }
    
    var body: some View {
        Button(action: {
            $isActive = …
Run Code Online (Sandbox Code Playgroud)

xcode ios swift swiftui

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