小编Han*_*ash的帖子

Swift Charts:.chartYScale 似乎只能以 100 为增量工作?

考虑到这是一个心率图表,我试图将图表的 Y 最大刻度设置为 210 (bpm),例如,但.chartYScale(domain: 0 ... 210)只有当我输入 200 或 300 时,它似乎才能正确缩放,中间的任何值都不起作用。这是故意的还是错误?

import SwiftUI
import Charts
import HealthKit

struct TestYAxisRangeChart: View {
    
    let heartRateData = [80.0, 90.0, 120.0, 150.0, 160.0, 140.0, 125.0, 110.0, 88.0]
    
    var body: some View {
        Chart {
            ForEach(heartRateData, id: \.self) { sample in
                LineMark(
                    x: .value("", heartRateData.firstIndex(of: sample)!),
                    y: .value("HR", sample))
                .foregroundStyle(Color.red)
                
            }

        }
        .chartYAxis{
            AxisMarks(position: .leading)
        }
        .frame(height: 300)
        .padding(.horizontal)
        .chartYScale(domain: 0 ... 210)
    }
    
}

struct TestYAxisRangeChart_Previews: PreviewProvider {
    static var previews: …
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-charts

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

Weather API + WidgetKit - “在不支持并发的函数中调用‘异步’”

TimelineProvider我正在尝试为 iOS 16制作一个WeatherKit,但我正在努力解决如何满足协议签名并使用新的异步 api 的问题。

这是我的代码:

struct WeatherProvider: TimelineProvider {
    
    func getSnapshot(in context: Context, completion: @escaping (WeatherEntry) -> ()) {       
        let weather = try? await WeatherService.shared.weather(for: currentLocation)        
        let entry = WeatherEntry(date: Date(), wind: nil, locationAuthStatus: nil)

        completion(entry)
    }

    // etc
}
Run Code Online (Sandbox Code Playgroud)

编译此命令会引发构建错误'async' call in a function that does not support concurrency

自动修复建议:Add 'async' to function 'getSnapshot(in:completion:)' to make it asynchronous

但如果你这样做,结构就不再符合:Type 'WeatherProvider' does not conform to protocol 'TimelineProvider'

这感觉应该是微不足道的,但我找不到任何关于如何做到这一点的例子。

async-await swift widgetkit weatherkit

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

无法在 MVVM 类中获取 SwiftData ModelContainer 和 ModelContext 的引用

我正在尝试了解新的 SwiftData 框架。只要我在 SwiftUI 视图中完成所有操作,就很容易让它工作。我试图成为一名优秀的编码员并将数据与 UI 分开,但无法连接到 ModelContainer 并且 ModelContext 是一个类文件。

这是一个可以按原样运行的示例:

模型:

@Model
final public class Thing: Identifiable {

    let myID = UUID()
    var name: String
    var comment: String

    init(name: String, comment: String) {
        self.name = name
        self.comment = comment
    }

}//struct
Run Code Online (Sandbox Code Playgroud)

ContentView:更改Button中的代码以创建10条测试记录以使用VM版本。

struct ContentView: View {

    @StateObject var contentVM = ContentViewModel()
    @Environment(\.modelContext) private var context

    @State private var name: String = ""
    @State private var comment: String = ""

    @State private var selection: Thing?

    @Query(sort: \.name) var things: …
Run Code Online (Sandbox Code Playgroud)

ios swift-data swiftui

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

如何使用 SwiftData 从列表中删除子项目?

我是 SwiftUI 的新手,对于我的第一个应用程序,我决定尝试 SwiftData,因为我不想稍后将其转换为 SwiftData。我的应用程序有计时器(MyTimer),每个计时器都有一个名称和几个重置,每个重置都有一个日期和一个文本字符串。我希望用户能够选择 MyTimer 并查看其重置列表,然后从那里能够编辑或删除其中的任何一个。因此,我的第一个视图允许创建 MyTimer 并向其添加重置。第二个视图显示所选 MyTimer 的重置列表。

我遇到的问题是,当我删除多个重置时,重置数组似乎没有更新,如果您从列表的同一行删除第二个重置,它会尝试删除已删除的重置,并且我收到错误:线程 1:致命错误:此方法不准备对脱离其托管对象上下文的支持数据进行操作。关系需要通过 objectID 进行深度复制才能发挥作用。

这是应用程序数据模型文件的代码:

import Foundation
import SwiftData
import SwiftUI

@Model
final class MyTimer {
    var id: String
    var name: String
    
    @Relationship(deleteRule: .cascade)
    var resets: [Reset]
    
    @Transient
    var sortedResets: [Reset] {
        print(resets.count)
        return self.resets.sorted { $0.date > $1.date }
    }

    init(_ name: String = "",
         startDate: Date = .now) {

        let id = UUID().uuidString
        self.id = id
        self.name = name
        self.resets = [Reset(text: "Started On", date: startDate)]
    } …
Run Code Online (Sandbox Code Playgroud)

ios swift swift-data swiftui

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

执行嵌入到一行终端命令中的 Swift 代码

我知道有 Swift REPL 和 Xcode 游乐场,但我想知道 Swift 中是否有替代方案,ruby -e "<code>"其中sh -c "<code>"给定的一行代码将作为命令的结果执行?

bash terminal swift

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

不再有“set”的最后一个属性了吗?

我读过的书声称“您可以使用第一个和最后一个属性,它们返回集合中的一个元素”

不过,我已经尝试过了,似乎不起作用。如果有人能为我解释一下,我将非常感激。

在此输入图像描述

set swift

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

如何从 appdelegate 呈现视图控制器?

我一整天都在寻找如何从应用程序委托中呈现视图控制器。看来在 xcode 11 中,window 属性被移动到了 scenedelegate,这让我很困惑。我想从 didReceiveRemoteNotification 函数的 appdelegate 中呈现一个视图控制器,这样当用户收到通知时,它会将他们带到一个包含信息的单独视图控制器。我曾尝试这样做:

self.window?.rootViewController?.present(LoginViewController(), animated: false, completion: nil)
Run Code Online (Sandbox Code Playgroud)

在 appdelegate 中,它曾经在我以前的应用程序中工作,但它似乎不再工作了。任何帮助将非常感激。

ios swift

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

如何创建一个可以在 SwiftUI 中更新的单例

我想创建一个全局变量来显示加载视图。我尝试了很多不同的方法,但不知道该怎么做。我需要能够在整个应用程序中访问此变量,并在更改单例的布尔值时更新 MotherView 文件。

struct MotherView: View {
    
    @StateObject var viewRouter = ViewRouter()
        
    var body: some View {
        
        if isLoading { //isLoading needs to be on a singleton instance
            Loading()
        }

        
        switch viewRouter.currentPage {
        case .page1:
            ContentView()
        case .page2:
            PostList()
        }
    }
}

struct MotherView_Previews: PreviewProvider {
    static var previews: some View {
        MotherView(viewRouter: ViewRouter())
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了下面的单例,但它不允许我更新共享实例?如何更新单例实例?

struct LoadingSingleton {
    static let shared = LoadingSingleton()
    var isLoading = false

    private init() { }
}
Run Code Online (Sandbox Code Playgroud)

singleton struct swiftui

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

在 swiftui 中播放 url 链接而不是 .mp3 文件

我使用 AVFoundation 制作了一个简单的快速音频视图。该代码适用于下载的文件,但我不希望应用程序大小很大。如果我可以从 URL 链接中使用它,是否可以?

我的代码是

import SwiftUI
import AVFoundation
import AVFAudio

struct AudioTest: View {
    
    @State var song1 = false
    
    var body: some View {
        Image(systemName: song1 ? "pause.circle.fill": "play.circle.fill")
            .font(.system(size: 25))
            .padding(.trailing)
            .onTapGesture {
                playSound(sound: "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3", type: "mp3")
                song1.toggle()
                
                if song1{
                    
                    audioPlayer1?.play()
                } else {
                    audioPlayer1?.pause()
                    
                }
        }
    }
}

struct AudioTest_Previews: PreviewProvider {
    static var previews: some View {
        AudioTest()
    }
}

var audioPlayer1: AVAudioPlayer?

func playSound1(sound: String, type:String){
    if let path = Bundle.main.path(forResource: sound, ofType: type) …
Run Code Online (Sandbox Code Playgroud)

avfoundation swiftui

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

发布 iOS 应用程序时出现无效签名错误

我正在尝试将应用程序的新版本上传到 App Store,但收到此错误:

签名无效。代码无法满足指定的代码要求。路径 [MyApp.app/MyApp] 处的文件未正确签名。确保您使用分发证书而不是临时证书或开发证书签署您的应用程序。验证 Xcode 中的代码签名设置在目标级别是否正确(覆盖项目级别的任何值)。此外,请确保您上传的包是使用 Xcode 中的 Release 目标而不是 Simulator 目标构建的。如果您确定代码签名设置正确,请在 Xcode 中选择“Clean All”,删除 Finder 中的“build”目录,然后重建您的发布目标。欲了解更多信息,请参阅 https://developer.apple.com/library/ios/documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html(ID:3a7649b2-33eb-4c70-90a4-b3c87e5e699c

有人对如何解决这个问题有一些想法吗?

publish code-signing ios

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