我想将地图状态存储在UserDefaults
. 是否可以做这样的事情:
@AppStorage("myMapType") var mapType: MKMapType = .standard
Run Code Online (Sandbox Code Playgroud)
或者我必须访问 rawValue 吗MKMapType
?我怎么能这样做呢?
按照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) 我做了一个自定义导航栏。并在其下方添加了滚动视图。我遇到的问题是,当我向下滚动时,滚动视图内的数据会出现在导航栏上。这是屏幕截图:
我的代码是:
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
我目前正在努力找出正确放置 .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)
然而,这似乎并没有真正起作用。有人对此有意见吗?
是否可以为 Swift Picker 设置占位符文本?我一直在尝试寻找有用的答案,但到目前为止还没有成功。
目前,当将可用列表值传递给选取器时,我还向它传递一个默认值作为开始。但是,此默认值的处理方式与用户选择它的方式相同。我想要实现的是,默认值应该变灰(就像标准文本字段的常规占位符),并且当用户打开选择器时,该值将“消失”作为默认值,迫使用户从列表中选择某些内容(但是不丢失范围)-
例如,如果我有一个 1-200 之间的值选择器,并且我将占位符设置为 100,那么当您打开它时,选择器仍会显示该值(以避免从头开始滚动),但它不会直接被视为目标值,除非用户实际选择它。
我正在使用 Swift Package Manager 创建各种库。到目前为止,我已经本地化了String
,因此我在 Package.swift 文件中添加了一个 Resources 文件夹、一些 .lproj 数据和一个 defaultLocalization。
现在我想本地化 XCAsset 目录中的一些图像,但是当我单击图像上的“本地化”时,建议的唯一本地化是我的 Package.swift 文件中的 defaultLocalization(如果我将“en”更改为“ fr”,我现在得到了“法语”本地化选项,但英语已经消失了)。
如何让 Xcode 了解我的包内支持的本地化?
我创建了一个带有完成处理程序的函数。有时我需要使用完成块,有时不需要。
这是函数:
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) -> ()' 不兼容
我在视图中创建了一个 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) 我正在尝试让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
仅使用即可工作,而不包含UIKit
在UIViewRepresentable
.
我试图模拟 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) swiftui ×6
swift ×4
ios ×3
gesture ×2
appstorage ×1
closures ×1
combine ×1
localization ×1
mapkit ×1
observable ×1
picker ×1
scrollview ×1
testing ×1
userdefaults ×1
xcode ×1