如何告诉JSDoc有关返回的对象的结构.我找到了@return {{field1: type, field2: type, ...}} description
语法并试了一下:
/**
* Returns a coordinate from a given mouse or touch event
* @param {TouchEvent|MouseEvent|jQuery.Event} e
* A valid mouse or touch event or a jQuery event wrapping such an
* event.
* @param {string} [type="page"]
* A string representing the type of location that should be
* returned. Can be either "page", "client" or "screen".
* @return {{x: Number, y: Number}}
* The location of the event
*/
var getEventLocation …
Run Code Online (Sandbox Code Playgroud) javascript documentation-generation code-documentation jsdoc jsdoc3
我现在正在尝试进入 SwiftUI,但正在努力解决基本问题。我今天的挣扎:我想知道 SwiftUI 中是否有类似控制器的东西?与 UI 无关的逻辑去哪儿了?
举一个具体的例子:
我有一个外部框架。当应用程序启动时,我启动该框架(现在在 AppDelegate 中)。它做了一些网络上的事情,根据结果,我展示了两个视图之一。其中之一,用户必须输入一些东西,按下 OK 按钮,我必须将输入传递回 Framework。我该怎么做?
我没有控制器或协调器,把它放在视图中(通过单例)对我来说似乎是错误的。
旁注:有趣的是,我发现的每个教程都省略了这样的内容。它们都专注于一个更多的视图和一个 ViewModel,但从不“缩小”以显示整个应用程序(除了与 NavigationLink 链接的两个视图)如何工作。如果有人能指出我解决这个问题的方法,我会非常感激。
我目前正在实现一个iOS应用程序,它使用CoreBluetooth在两个设备之间传输数据.例如,要将数据从中央发送到外设,我使用以下代码:
NSData *data = [NSJSONSerialization dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:nil];
NSLog(@"Writing data of length %d", [data length]);
[peripheral writeValue:data forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];
Run Code Online (Sandbox Code Playgroud)
这个工作绝对正常,但问题是我已经多次读过,因为特性一次最多可以传输20个字节.此外,当我查看Apple的BTLE示例代码时, 他们实现了一种将数据拆分为20字节块的机制.但是上面的代码打印出类似Writing data of length 124
的东西- 数据在其他设备上很好地到达.
那么:为什么这个工作呢?更重要的是,我担心这会在某些时候破裂,特别是当非iOS设备发挥作用时.
data-transfer objective-c ios core-bluetooth bluetooth-lowenergy
我目前正在将一个应用程序带到 iOS 应用程序商店。这只是我在空闲时间制作的一个小应用程序。它与锻炼相关,因此该应用程序需要访问用户的位置和健康数据。然而,数据仅存储在用户设备上。我的应用程序不会将此数据发送到任何地方(除了 iCloud 同步),不需要登录,而且除了您在设置 iOS 时必须同意的内置 Apple 框架之外,我也没有实现任何跟踪框架。
\n\n现在,应用程序商店要求我链接到隐私政策(可能是因为健康数据可能是敏感信息)。我在网上搜索了隐私政策生成器,但我能找到的所有内容似乎都假设您收集个人数据。其中包括以下声明:
\n\n\n\n\n我们出于各种目的收集多种不同类型的信息,以便为您提供和改进我们的服务。
\n
或者
\n\n\n\n\n您的信息(包括个人数据)可能会传输到 \xe2\x80\x94 并保存在位于您所在州、省、国家或其他政府管辖区之外的 \xe2\x80\x94 计算机上,这些地方的数据保护法可能与当地的数据保护法不同。您的管辖权。
\n
我担心这可能会让用户感到困惑,因为我在应用程序商店描述中明确声明数据未存储在我的服务器上。为了合法起见,我是否应该将其保留在保单中?或者,如果我实际上不收集个人用户数据,任何人都可以为我指明我需要在政策中包含哪些内容的正确方向吗?
\n我在 SwiftUI 中有一个简单的应用程序,它显示 a List
,每个项目都是 a ,VStack
包含两个Text
元素:
var body: some View {
List(elements) { item in
NavigationLink(destination: DetailView(item: item)) {
VStack(alignment: .leading) {
Text(item.name)
Text(self.distanceString(for: item.distance))
}
}
}
.animation(.default)
}
Run Code Online (Sandbox Code Playgroud)
.animate()
之所以在那里,是因为我想在elements
数组更改时对列表的更改进行动画处理。不幸的是,SwiftUI 还会对内容的任何更改进行动画处理,从而导致奇怪的行为。例如,Text
每个项目中的第二个更新非常频繁,现在更新将...
在更新到新内容之前很快显示被截断的标签(在末尾)。
那么如何在更新列表内容时防止这种奇怪的行为,但在列表中的元素发生变化时保持动画呢?
如果相关,我正在创建一个 watchOS 应用程序。
我在OS X上显示一个本地NSUserNotification,代码如下:
NSUserNotification *notification = [[NSUserNotification alloc] init];
[notification setTitle:@"Some Title"];
[notification setHasActionButton:YES];
[notification setActionButtonTitle:@"Snooze"];
NSUserNotificationCenter *center = [NSUserNotificationCenter defaultUserNotificationCenter];
[center setDelegate:self];
[center scheduleNotification:notification];
Run Code Online (Sandbox Code Playgroud)
我面临的问题是,如果单击通知本身或"操作按钮",我只会收到一条消息,但如果单击"其他"按钮(关闭按钮),我还想执行一些代码.如果NSUserNotification被解除或点击关闭按钮,有没有办法得到通知?userNotificationCenter:didActivateNotification:
单击关闭按钮时不会触发NSUserNotificationCenter .
如果这是不可能的,有没有办法在其Reminder应用程序中创建Apple使用的下拉按钮(如果用户持有操作按钮,则会打开一个菜单).
谢谢!
cocoa notifications button nsusernotification nsusernotificationcenter
我正在使用 XCUITest 来测试存在键盘时的 UI 行为 - 例如,当键盘出现时内容是否正确向上移动。
出于某种原因,iOS 模拟器坚持定期禁用软件键盘。有时在模拟器重新启动时,但有时甚至只是在测试过程中切换文本字段时。
有没有办法在模拟器中始终强制使用软键盘?例如命令行参数或 XCUIDevice 上的属性?我在 CI 上运行这些测试,因此无法在模拟器中手动启用软件键盘。
也许你们可以帮我解决这个问题:我有一个字典和一个与该字典结合的ItemsControl.每个条目的Key确定ItemsControl中每个Item的内容,Value确定每个Item的宽度.这个问题很大:宽度是一个百分比值,所以它告诉我,例如,我的Item需要是其父级的20%.
我怎样才能做到这一点?我知道网格能够处理基于星的宽度,但由于我必须在网格的开头定义GridDefinition,我不能在ItemsControl.ItemTemplate中执行此操作.
当前代码:
<ItemsControl ItemsSource="{Binding Distribution}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid IsItemsHost="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<!-- I NEED THIS TO BE A CERTAIN PERCENTAGE IN WIDTH -->
<Label Content="{Binding Key.Text}" Foreground="{Binding Key.Color}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?有没有优雅的方法来解决这个问题?
谢谢!
澄清:百分比应该基于ItemControls父级!
另一个:每个项目应该是网格的一列,而不是一行.所以我需要所有项目在同一行中彼此相邻.
解决方案:
感谢您的帮助,可以通过使用Multibinding和Binding到ItemsControl的ActualWidth来解决此问题.这样,只要ItemsControl的大小发生变化,Items也会发生变化.不需要网格.此解决方案仅创建相对宽度,但当然可以将相同的解决方案应用于项目的高度.这是一个简短的版本,有关更全面的解释,请参见下文:
XAML:
<ItemsControl ItemsSource="{Binding Distribution}" Name="itemsControl" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel IsItemsHost="True" Orientation="Horizontal" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Key.Text}"
Foreground="{Binding Key.Color}">
<Label.Width>
<MultiBinding Converter="{StaticResource myConverter}">
<Binding Path="Value"/>
<Binding …
Run Code Online (Sandbox Code Playgroud) 我目前正在将我的一个应用程序更新到iPhone X,并试图在显示图像的全屏视图控制器上隐藏主页指示器:
override func prefersHomeIndicatorAutoHidden() -> Bool {
return true
}
Run Code Online (Sandbox Code Playgroud)
但是,这种方法似乎无能为力.它永远不会被调用,并且即使在一段时间不活动之后,主页指示器也永远不会被隐藏.模拟器似乎支持这一点,因为Photos应用程序确实隐藏了主页指示器.
是否需要设置其他标志才能使其工作?我在多个视图控制器中尝试了它,但没有一个显示正确的行为.
我也尝试添加
if #available(iOS 11.0, *) {
self.setNeedsUpdateOfHomeIndicatorAutoHidden()
}
Run Code Online (Sandbox Code Playgroud)
对我而言viewDidLoad()
无济于事
今天,我将 SwiftUI 视图的 ViewModel 重构为结构化并发。它会触发网络请求,当请求返回时,更新@Published
属性以更新 UI。由于我使用 aTask
来执行网络请求,因此我必须返回来MainActor
更新我的属性,并且我正在探索不同的方法来执行此操作。MainActor.run
一种简单的方法是在 my 内部使用Task
,效果很好。然后我尝试使用@MainActor
,但不太理解这里的行为。
稍微简化一下,我的 ViewModel 看起来有点像这样:
class ContentViewModel: ObservableObject {
@Published var showLoadingIndicator = false
@MainActor func reload() {
showLoadingIndicator = true
Task {
try await doNetworkRequest()
showLoadingIndicator = false
}
}
@MainActor func someOtherMethod() {
// does UI work
}
}
Run Code Online (Sandbox Code Playgroud)
我原以为这不能正常工作。
首先,我预计 SwiftUI 会抱怨showLoadingIndicator = false
主线程之外发生的情况。事实并非如此。所以我设置了一个断点,似乎连Task
a 内的内容@MainActor
都在主线程上运行。为什么这可能是另一天的问题,我想我还没有完全弄清楚Task
。现在,让我们接受这一点。
因此,我预计 UI 在我的网络请求期间会被阻止 - 毕竟,它是在主线程上运行的。但事实也并非如此。网络请求运行,并且 …