使用下面的代码,我成功地屏蔽了我绘图的一部分,但它与我想要屏蔽的相反.这掩盖了绘图的内部,我想掩盖外部.有一种简单的方法来反转这个面具吗?
myPath
下面是一个UIBezierPath
.
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
CGMutablePathRef maskPath = CGPathCreateMutable();
CGPathAddPath(maskPath, nil, myPath.CGPath);
[maskLayer setPath:maskPath];
CGPathRelease(maskPath);
self.layer.mask = maskLayer;
Run Code Online (Sandbox Code Playgroud) 我想写一个这样的测试:
当我的应用程序转到某个窗格时,它应该请求使用相机的权限.
我想测试窗格是否出现.我正在使用XC的内置UITest框架来执行此操作.根据我在谷歌和这里发现的,似乎我应该做以下事情:
let dialogAppearedExpectation = expectationWithDescription("Camera Permission Dialog Appears")
addUIInterruptionMonitorWithDescription("Camera Permission Alert") { (alert) -> Bool in
dialogAppearedExpectation.fulfill()
return true
}
goToCameraPage()
waitForExpectationsWithTimeout(10) { (error: NSError?) -> Void in
print("Error: \(error?.localizedDescription)")
}
Run Code Online (Sandbox Code Playgroud)
测试始于失败,很棒.我实现了goToCameraPage,它正确地导致出现"给予权限"弹出窗口.但是,我希望这会触发中断监视器.然而,没有捕获到这样的中断,并且不会发生履行.
我在某个地方读到app.tap()
了对话框出现后你应该做的事情.但是,当我这样做时,它会单击"允许"按钮.对话框消失,仍然没有处理中断.
是否有某种方式将权限对话框视为"警报"或无法处理?我甚至进入并用一个看起来的东西替换了中断位app.alerts
,但结果是空的,即使我正在看模拟器中的弹出窗口.
谢谢!我正在为iPhone 6s使用Xcode7.2,iOS 9.2模拟器.
我经常有相对复杂的协议与associatedType约束,在泛型中使用,由CoreData类型扩展使用等.因此我经常得到错误:Type .. does not conform to protocol ...
.我通常可以在一段时间后弄清楚这一点,但错误信息实际上是无益的 - 通常,如果问题是方法或某事的签名中的一个小错误,则该bug需要一段时间才能找到.使用Java接口,IDE通常会报告类似的内容method ... not implemented
,因此我知道要更详细地查看哪种方法.
有没有办法让Xcode报告有关协议成员的详细信息?
到目前为止,在我的项目中,我使用许多特性来允许在注入依赖项的单元测试中进行模拟/存根.然而,到目前为止我所做的一个细节似乎很可疑,我甚至惊讶它甚至编译.我担心会发生一些我看不见或不明白的危险事件.它基于这两种方法签名之间的差异:
fn confirm<T>(subject: &MyTrait<T>) ...
fn confirm<T>(subject: impl MyTrait<T>) ...
Run Code Online (Sandbox Code Playgroud)
我只是impl ...
在方法参数中发现了语法,它似乎是唯一记录的方法,但是我的测试已经使用了另一种方式,我根据Go解决了同样的问题(方法的大小)来直觉编译时的参数,当参数可以是接口的任何实现者,并且引用可以来拯救).
这两者有什么区别?为什么他们都被允许?它们都代表合法用例,还是我的参考语法(&MyTrait<T>
)严格来说更糟糕?
我有一个移动CLPlacemark
对象并使用它们的应用程序,我想对与它们交互的几个组件进行单元测试。为此,我希望能够使用生成CLPlacemark
具有已知值的mock的方法从 MapKit 中删除对真正反向地理定位的调用。
CLPlacemark
只有一个初始化程序(复制初始化程序)。但在文档中,它说:
地标对象通常由 CLGeocoder 对象生成,但您也可以自己显式创建它们。
但是,大多数成员都是只读的,因此我不确定如何创建具有自定义值的成员。是否可以在 Swift 中以这种方式设置内部属性?如果没有,关于它们在上述引文中的含义有什么想法吗?
我想在用户交互期间触发基于某些UI关系的条件逻辑(在这种情况下,我想在用户滚动到a中的某个点时调用方法UIScrollView
).我希望以下代码行能够合法地执行此操作,因为它具有很强的表现力:
func scrollViewDidScroll(scrollView: UIScrollView) {
guard let overlap = scrollView.contentOffset.y - 220 where overlap > 0 else {
return
}
reactToScrollOverlap(of: overlap)
}
Run Code Online (Sandbox Code Playgroud)
但是,我得到的错误是guard let
需要一个可选类型.这是合理的,但我希望在这种情况下该where
子句自然会引入一个可选项,因为如果算法运算错误则没有匹配值overlap
.
有没有办法使用guard let
(或者说if let
),包含的where
条款规定了Int,CGFloat或其他原始/原始类型之间算术结果的条件?
我正在使用大厅和构建二进制文件,我想发送到集成测试.然而,它们是轻量级的,使用S3存储桶进行永久存储似乎有点过分.另外我正在进行版本控制semver-resource
,这似乎也需要S3或其他方式支持它.
有没有办法配置本地工作者或类似的blobstore?我可以使用Concourse postgres数据库存储我的semver吗?它足够小,应该适合数据库表.
我正在尝试编写一个小程序,该程序循环运行并每 30 秒执行一些代码。
我不太关心它的时间是否准确,但我确实关心该程序可以在 Linux 平台上编译和运行,并且可以使用 swift 包管理器来构建和测试它。
我的第一枪就像
while true {
print("doing the work")
sleep(30) // also tried usleep(30*1000*1000)
}
Run Code Online (Sandbox Code Playgroud)
显然,我在 swift 4 中没有sleep(_:)
找到任何引用,并且该代码无法编译。我尝试使用 a Timer
,但是一旦计时器开始计时,程序就会退出,因为计时器在后台运行,而主线程的唯一工作就是安排它。
这一定比看起来更容易。关于 Swift 中的线程管理,我缺少什么可以解释我发现这个有多难?
--- 编辑为了澄清为什么这与众多建议的重复项不同:
我明确地尝试让主线程休眠,正如我上面提到的,我无法使用sleep
其他地方接受的答案建议的函数在 Linux 上使用 Swift 进行编译。我的程序在 CLI 上下文中的上下文意味着后台线程中的延迟操作(正如许多其他可用来源所建议的那样)在这里不起作用。此外,此 CLI 在 Linux 上运行,因此我不能依赖仅限 iOS 的库。