小编Rol*_*tte的帖子

如何在 SwiftUI 中使用 @AppStorage 存储 EnumType

我想将地图状态存储在UserDefaults. 是否可以做这样的事情:

@AppStorage("myMapType") var mapType: MKMapType = .standard
Run Code Online (Sandbox Code Playgroud)

或者我必须访问 rawValue 吗MKMapType?我怎么能这样做呢?

swiftui appstorage

12
推荐指数
2
解决办法
3467
查看次数

由于@Observable 的美妙之处,如何从一个值中获取发布者?

按照Foo2类示例,我曾经将我的对象作为ObservableObject,我可以设置一个@Published值并监听它们的更改,就像使用合并一样。

现在我正在使用示例@Observable中所示的宏Foo1,我无法创建类似管道的组合。

@Observable有没有一种方法可以像我在使用@Published对象中的宏值时使用的方式来监听宏值ObservableObject

@Observable class Foo1 {

  var isEnabled = false

  init() {
    isEnabled
      .map { $0 } // Error: Value of type 'Bool' has no member 'map'
  }
}

class Foo2: ObservableObject {

  @Published var isEnabled = false

  var cancellables = Set<AnyCancellable>()

  init() {
    $isEnabled
      .map { $0 } // Works like a charm
      .sink { print($0.description) }  
      .store(in: &cancellables)
  }
}
Run Code Online (Sandbox Code Playgroud)

observable swift combine

11
推荐指数
1
解决办法
601
查看次数

滚动视图项目出现在 SwiftUI 中的导航栏上

我做了一个自定义导航栏。并在其下方添加了滚动视图。我遇到的问题是,当我向下滚动时,滚动视图内的数据会出现在导航栏上。这是屏幕截图:

滚动查看图像

我的代码是:

struct NewsfeedView: View {
    
    var newsfeedModel: [NewsFeedData]
    
    var body: some View {
        
        VStack {
            
            CustomNavBar(navTitle: "Newsfeed")
            
            ScrollView {
                LazyVStack{
                    ForEach(newsfeedModel) { modelData in
                         
                        NewsFeedTableViewCell(newsFedd: modelData)
          }
        }
      }
    }.ignoresSafeArea()
  }
}
Run Code Online (Sandbox Code Playgroud)

有谁知道是什么问题?

scrollview navigationbar swiftui swiftui-scrollview swiftui-navigationview

8
推荐指数
1
解决办法
4268
查看次数

在哪里放置 .register() 方法来设置 UserDefaults 的初始/默认值?

我目前正在努力找出正确放置 .register() 方法的位置,以设置 UserDefaults 的初始/默认值(在应用程序的每次启动时)。

这是我尝试在 Xcode 随项目生成的“App”文件中初始化它的地方:

import SwiftUI

@main
struct TestApp: App {

    init() {
        //Sets default values for the user defaults that have not yet been set and should not return 0/false
        UserDefaults.standard.register(defaults: [
                "selectedRoundLength": 1
            ]
        )
    }

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,这似乎并没有真正起作用。有人对此有意见吗?

ios userdefaults swiftui

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

将选取器默认值设置为占位符

是否可以为 Swift Picker 设置占位符文本?我一直在尝试寻找有用的答案,但到目前为止还没有成功。

目前,当将可用列表值传递给选取器时,我还向它传递一个默认值作为开始。但是,此默认值的处理方式与用户选择它的方式相同。我想要实现的是,默认值应该变灰(就像标准文本字段的常规占位符),并且当用户打开选择器时,该值将“消失”作为默认值,迫使用户从列表中选择某些内容(但是不丢失范围)-

例如,如果我有一个 1-200 之间的值选择器,并且我将占位符设置为 100,那么当您打开它时,选择器仍会显示该值(以避免从头开始滚动),但它不会直接被视为目标值,除非用户实际选择它。

picker ios swiftui

5
推荐指数
1
解决办法
1835
查看次数

本地化 Swift 包中的 XCAssets 图像

我正在使用 Swift Package Manager 创建各种库。到目前为止,我已经本地化了String,因此我在 Package.swift 文件中添加了一个 Resources 文件夹、一些 .lproj 数据和一个 defaultLocalization。

现在我想本地化 XCAsset 目录中的一些图像,但是当我单击图像上的“本地化”时,建议的唯一本地化是我的 Package.swift 文件中的 defaultLocalization(如果我将“en”更改为“ fr”,我现在得到了“法语”本地化选项,但英语已经消失了)。

如何让 Xcode 了解我的包内支持的本地化?

xcode localization swift-package-manager

5
推荐指数
0
解决办法
177
查看次数

如何制作与 nil 兼容的完成处理程序?

我创建了一个带有完成处理程序的函数。有时我需要使用完成块,有时不需要。

这是函数:

func numberCheck(number: String , completion : @escaping (Bool)->()){
     //some task do here 
    completion(true)
}
Run Code Online (Sandbox Code Playgroud)

用:

numberCheck(number: "77" , completion: {_ in
    //some task do here 
})
Run Code Online (Sandbox Code Playgroud)

但我想让它完成块为零:

numberCheck(number: "77" ,  completion: nil)
Run Code Online (Sandbox Code Playgroud)

但它给了我一个错误:

Nil 与预期的参数类型 '(Bool) -> ()' 不兼容

closures swift

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

如何在 SwiftUI 中实现触发 switch case 的左或右 DragGesture()?

我在视图中创建了一个 DragGesture,无论用户向左滑动还是向右滑动,它都应该选择一个 @State(Bool)。

问题是只检测到向右滑动。

如何使用 .gesture() 来捕捉用户是在他的屏幕上向左还是向右滑动?

import SwiftUI

struct SwiftUIView: View {

  //MARK: Value to change on swipe gesture
  @State var swipeRight: Bool

  var body: some View {
    VStack {
      //MARK: Value displayed after user swiped
      Text($swipeRight ? "Right" : "Left")
    }
    .gesture(
      DragGesture()
        .onChanged { (value) in
          //MARK: What is it missing here?
          switch value.location.x {
          case ...(-0.5):
            self.swipeRight = false
            print("Swipe Left return false")
          case 0.5...:
            self.swipeRight = true
            print("Swipe Right return true")
          default: ()
          }
    }) …
Run Code Online (Sandbox Code Playgroud)

gesture ios swift swiftui

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

有人可以使用 SwiftUI+MapKit+LongPress 吗?

我正在尝试让SwiftUI+ MapKit+LongPress手势正常工作。当我在 中添加地图时ContentView,效果很好。然后,我将.onLongPressGesture修改器添加到地图中,平移/缩放停止工作。长按虽然有效。

我正在处理的代码:

Map(coordinateRegion: $region, interactionModes: .all, showsUserLocation: true)
  .onLongPressGesture {
    // How do I get the location (Lat/Long) I am pressed on?
    print("onLongPressGesture")
  }
Run Code Online (Sandbox Code Playgroud)

另外,有没有办法从长按手势中获取纬度/经度?

希望使其SwiftUI仅使用即可工作,而不包含UIKitUIViewRepresentable.

gesture mapkit swiftui

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

如何模拟和测试存储字符串的 UserDefaults 计算属性?

我试图模拟 UserDefaults 以便能够测试其行为。

在不破坏保存用户令牌密钥的实际计算属性的情况下,最好的方法是什么?

class UserDefaultsService {

  private struct Keys {
    static let token = "partageTokenKey"
  }

  //MARK: - Save or retrieve the user token
  static var token: String? {
    get {
      return UserDefaults.standard.string(
        forKey: Keys.token)
    }
    set {
      UserDefaults.standard.set(
        newValue, forKey: Keys.token)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

testing swift swiftyuserdefaults

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