我正在为我的iOS应用程序构建共享扩展,我无法使用默认设置SLComposeServiceViewController,所以我创建了(在故事板中)基本的UIViewController并嵌入在导航控制器中.我得出现它,解雇它等但它总是全屏.我想让它看起来更像是一个对话框.我尝试self.preferredContentSize在我的视图控制器上使用,尝试Use Preferred Explicit Size在Interface Builder中的导航控制器,但它不起作用.
我有UICollectionView自定义单元格 - 它们UITextView主要覆盖整个单元格.这在使用时出现问题didSelectItemAtIndexPath.触发它的唯一方法是在外面敲击UITextView.我想让它在您点击的单元格中的任何位置触发,无论是否有文本视图.如何才能做到这一点?
我有一个func getValue() -> Bool从后台线程调用的函数。这是有意的,也是必需的。现在,getValue()需要在主线程上执行一些东西,在这种情况下它需要访问UIApplication.shared.canOpenURL,它必须在主队列上运行。
这是我目前的功能:
func getValue() -> Bool {
guard let url = URL(string: "someurl") else { return false }
return UIApplication.shared.canOpenURL(url)
}
Run Code Online (Sandbox Code Playgroud)
如何将该函数转换为线程安全的函数,即确保它始终在主线程上运行,而无需
我试过这个:
// This causes a deadlock, see /sf/answers/2973926931/
func getValue() -> Bool {
var flag = false
let group = DispatchGroup()
group.enter()
DispatchQueue.main.async {
if let url = URL(string: "someurl"), UIApplication.shared.canOpenURL(url) {
flag = true
}
group.leave()
}
group.wait()
return flag
}
Run Code Online (Sandbox Code Playgroud)
和这个:
// This crashes with …Run Code Online (Sandbox Code Playgroud) 我试图ptrace像这样调用一个函数ptrace(PT_DENY_ATTACH, 0, 0, 0);
但是当我尝试使用#include <sys/ptrace.h>Xcode 导入它时给了我一个错误'sys/ptrace.h' file not found.我错过了什么,我是否需要导入一个库,或者这在iOS上根本不可用?
我刚从2015 WWDC示例代码(https://developer.apple.com/sample-code/wwdc/2015/)下载了FourInARow,并注意到文件中有一个奇怪的属性声明AAPLViewController.m
@property NSArray<NSMutableArray<CAShapeLayer *> *> *chipLayers;
Run Code Online (Sandbox Code Playgroud)
这是什么意思?
我前段时间也问过类似的问题。有人问我怎样才能变成这样的数组:
[[1,2,3],[4,5,6],[7,8,9]]
Run Code Online (Sandbox Code Playgroud)
对此:
[1,2,3,4,5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)
但是现在我想把相同的数组变成这个:
[1,4,7,2,5,8,3,6,9]
Run Code Online (Sandbox Code Playgroud)
假设所有子数组具有相同的长度。
如果您尚未注意到,结果中的前三项就是这三个子数组中的第一项。结果中的第四,第五和第六项是每个子数组的第二项。
如果您仍然不了解,也许这会有所帮助:
原始数组:
[
[1,2,3],
[4,5,6],
[7,8,9]
]
Run Code Online (Sandbox Code Playgroud)
结果:
[
1,4,7,
2,5,8,
3,6,9
]
Run Code Online (Sandbox Code Playgroud)
此刻,我有这个:
func flatten(array: [[Int]]) -> [Int] {
var flat = [Int]()
for i in 0..<array[0].count {
for subarray in array {
flat.append(subarray[i])
}
}
return flat
}
Run Code Online (Sandbox Code Playgroud)
我不认为这很花哨。如何快速进行此操作?
为了避免成为XY问题,这就是我要这样做的原因。
我正在开发一个棋盘游戏。我正在使用HLSpriteKit中的棋盘游戏HLGridNode(基本上是一堆正方形的网格状布局)。要编辑网格节点的内容,我需要传递一个Sprite节点的1D数组,而不是2D数组。
为了使生活更轻松,我将模型对象存储在2D数组中。这样,我可以通过以下操作从左边引用5个正方形,从顶部引用2个正方形:
modelObjects[5][2]
Run Code Online (Sandbox Code Playgroud)
如果我使用展平2D数组.flatMap { $0 }并将结果传递到网格节点,则它modelObjects[5][2]看起来将是从左侧2个正方形和从顶部5个正方形。
这不是重复这个,因为这个问题似乎有数组与工作的明确的数量。尽管我可以将2D数组放入一个循环中并执行这些操作enumerate().map {...},但这似乎是一个漫长的过程。我认为使用2D阵列进行此操作必须更简单。