每次应用程序启动时我都必须进行一些初始设置,但我收到错误:
错误很明显,答案却不是。我尝试将 init 放入子视图中,但我不能,它需要位于 root 中@main。我是这样定义的:
@StateObject private var amplifyConfig: AmplifyConfig = AmplifyConfig()
init() {
if(amplifyConfig.isAmplifyConfigured == false) {
amplifyConfig.dataStoreHubEventSubscriber()
amplifyConfig.configureAmplify()
}
}
Run Code Online (Sandbox Code Playgroud)
我如何摆脱该警告并实际实现它,这样它就不会创建多个实例,这就是我使用 @EnvironmentObject 的原因?
我试图让用户登录,但收到以下错误:
Generic parameter 'T' could not be inferred
Run Code Online (Sandbox Code Playgroud)
这是代码:
// Gets User signed-in
func getUser() async throws -> AuthUser {
do {
try await withUnsafeThrowingContinuation { continuation in
if let user = Amplify.Auth.getCurrentUser() {
continuation.resume(returning: user )
}
}
} catch(let error) {
print(error)
}
}
Run Code Online (Sandbox Code Playgroud)
这是为什么?
我正在尝试使用 github actons 制作一个简单的工作流程,因此当我将例如推送到我的主分支时,它会macOS-latest在OS 12.4, iPhone 11 Pro Max. 因为很新,教程不全,谁能借我一下?
这就是我现在所拥有的:
name: StyleOn_Workflow
on: [push]
jobs:
build:
runs-on: macOS-latest
strategy:
matrix:
destination: ['platform=iOS Simulator,OS=12.4,name=iPhone 11 Pro Max']
steps:
- uses: actions/checkout@master
- name: Build
run: swift build -v
test:
name: Test
runs-on: macOS-latest
strategy:
matrix:
destination: ['platform=iOS Simulator,OS=12.4,name=iPhone 11 Pro Max']
steps:
- name: Checkout
uses: actions/checkout@master
- name: Run tests
run: swift test -v
Run Code Online (Sandbox Code Playgroud)
此外,由于我没有将应用程序部署到应用程序商店,我该如何进行部署阶段?也许将它合并到主分支?我需要有 3 个阶段,构建、测试和部署
这是我得到的错误:
我有当前有效的功能。我将它与完成处理程序一起使用:
func getTokenBalances(completion: @escaping (Bool) -> Void) {
guard let url = URL(string: "someApiUrlFromLostandFound") else {
print("Invalid URL")
completion(false)
return
}
AF.request(url, method: .get).validate().responseData(completionHandler: { data in
do {
guard let data = data.data else {
print("Response Error:", data.error as Any)
completion(false)
return
}
let apiJsonData = try JSONDecoder().decode(TokenBalanceClassAModel.self, from: data)
DispatchQueue.main.async {
self.getTokenBalancesModel = apiJsonData.data.items
completion(true)
}
} catch {
print("ERROR:", error)
completion(false)
}
})
}
Run Code Online (Sandbox Code Playgroud)
如何将其转换为 swift 5.5 的新 async/await 功能?
这是我尝试过的:
func getTokenBalances3() async {
let url …Run Code Online (Sandbox Code Playgroud) 我有以下内容:
DatePicker("Time between meals", selection: $time, displayedComponents: .hourAndMinute)
Run Code Online (Sandbox Code Playgroud)
但我需要显示的不是日期,而是一个轮子来选择我想要的小时和分钟,正如变量所说,对于两餐之间的时间,假设是 3 小时和 2 分钟,而不是晚上 7:00。我怎样才能做到这一点?
这就是我需要的:
谢谢
有没有最新的方法来转换文本内的链接?我从 API 中获取此类文本:
var someText: String = "with banks (for example to the sometimes controversial but leading exchange <a href="https://www.coingecko.com/en/exchanges/bitfinex">Bitfinex</a>)."
Run Code Online (Sandbox Code Playgroud)
如何将该链接转换为具有正确名称的可点击链接(在上面的示例中:Bitfinex)?
文本可以包含多个链接。SwiftUI 现在支持 markdown,手动我可以这样做:
Text("[Privacy Policy](https://example.com)")
Run Code Online (Sandbox Code Playgroud)
但是我该如何处理从 api 接收到的带有多个链接的文本呢?
寻找 Swift 5 和 SwiftUI 3 解决方案。
用户已登录,我可以访问他的 uid,但我无法获取属于该用户的文档,这就是我尝试这样做的方式:
private func getDocument() {
var userID = Auth.auth().currentUser?.uid
userID = String(userID!)
var currentUser = Auth.auth().currentUser
// Get sspecific document from current user
let docRef = db.collection("users").document("bnf2s3RURUSV2Oecng9t")
// Get data
docRef.getDocument { (document, error) in
if let document = document, document.exists {
let dataDescription = document.data().map(String.init(describing:)) ?? "nil"
print("Document data: \(dataDescription)")
} else {
print("Document does not exist")
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您注意到,如果我手动输入“bnf2s3RURUSV2Oecng9t”,它将访问数据,但关键是要能够知道“bnf2s3RURUSV2Oecng9t”是什么,以便我可以将它放在上面的硬编码变量上。我的最终目标是能够获取当前用户的名字:)
firebase swift firebase-authentication firebase-realtime-database google-cloud-firestore
我需要我的应用程序在启动时配置后端,这是执行此操作的函数:
// Initializes Amplify
final func configureAmplify() async {
do {
// Amplify.Logging.logLevel = .info
let dataStore = AWSDataStorePlugin(modelRegistration: AmplifyModels())
let syncWithCloud = AWSAPIPlugin()
let userAuth = AWSCognitoAuthPlugin()
try Amplify.add(plugin: userAuth)
try Amplify.add(plugin: dataStore)
try Amplify.add(plugin: syncWithCloud)
try Amplify.configure()
print("Amplify initialized")
} catch {
print("Failed to initialize Amplify with \(error)")
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试将它放在 @main init 中,如下所示:
init() async {
await networkController.configureAmplify()
}
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
Type 'MyApplicationNameApp' does not conform to protocol 'App'
Run Code Online (Sandbox Code Playgroud)
我尝试在初始化它之后应用建议:
init() {
}
Run Code Online (Sandbox Code Playgroud)
但这看起来很奇怪,所以现在我有 2 个 init。这里发生了什么以及在应用程序启动时初始化多个异步函数的正确方法是什么,例如:
下面是我的自定义文本编辑器,一旦您单击笔进行编辑,就会出现一个新空间,因此之前的文本与新文本不在同一行。我怎样才能解决这个问题?这是一个简单的可重现示例:
struct SwiftUIView: View {
@State var name: String = "test"
@State var showEdit: Bool = true
var body: some View {
HStack {
HStack {
if(showEdit) {
CustomTextEditor.init(placeholder: "My unique name", text: $name)
.font(.headline)
} else {
Text(name)
.font(.headline)
}
}
Spacer()
Button(action: {
showEdit.toggle()
}) {
Image(systemName: "pencil")
.foregroundColor(.secondary)
}
}
}
}
struct CustomTextEditor: View {
let placeholder: String
@Binding var text: String
var body: some View {
ZStack {
if text.isEmpty {
Text(placeholder)
.foregroundColor(Color.primary.opacity(0.25))
}
TextEditor(text: …Run Code Online (Sandbox Code Playgroud) 通过在设置中设置默认邮件应用程序的新选项,我想知道是否有更简单的发送电子邮件的解决方案。现在我正在使用手动解决方案手动添加第三方应用程序,如下所示:
...
if MFMailComposeViewController.canSendMail() {
self.settingsViewModel.showingFeatureEmail.toggle()
} else if let emailUrl = self.settingsViewModel.createEmailUrl(to: self.generalConstants.email, subject: "Feature request! [\(self.generalConstants.appName)]", body: "Hello, I have this idea ") {
UIApplication.shared.open(emailUrl)
} else {
self.settingsViewModel.showMailFeatureAlert = true
}
...
func createEmailUrl(to: String, subject: String, body: String) -> URL? {
let subjectEncoded = subject.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!
let bodyEncoded = body.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!
let gmailUrl = URL(string: "googlegmail://co?to=\(to)&subject=\(subjectEncoded)&body=\(bodyEncoded)")
let outlookUrl = URL(string: "ms-outlook://compose?to=\(to)&subject=\(subjectEncoded)")
let yahooMail = URL(string: "ymail://mail/compose?to=\(to)&subject=\(subjectEncoded)&body=\(bodyEncoded)")
let sparkUrl = URL(string: "readdle-spark://compose?recipient=\(to)&subject=\(subjectEncoded)&body=\(bodyEncoded)")
if let gmailUrl = gmailUrl, …Run Code Online (Sandbox Code Playgroud) 我需要处理一个文件并且它正在工作,但是我需要更改文件模式。这是需要的:someText_XYZ_*.dat
我添加了星号,因此_接受之后的所有内容,但是不接受具有该名称的文件:someText_XYZ_abc1.dat
模式存储在Oracle表中。当我运行应用程序时,将读取表,并使用文件模式来匹配文件名(可能在Apache Camel中)。当前有效的示例是:.*.csv和[0-9]{7}.abc.*.csv
我的新模式有什么问题?
我有一个字符串:$271.65,如何$以最原生的方式在之后添加一个空格?我正在使用 SwiftUI
我尝试了该属性,.kerning(10)但在每个字符后增加了空格,我只想要第一个。
谢谢
swift ×10
swiftui ×8
alamofire ×1
alamofire5 ×1
avfoundation ×1
aws-amplify ×1
firebase ×1
github ×1
ios ×1
regex ×1