我正在尝试使用NumberFormatter
Swift 3 Decimal
,但我对如何Decimal
实现真正感到困惑.我遇到的问题是这Decimal
是一个结构,所以NSDecimalNumber
每次我想使用格式化程序时我都必须将它连接起来,我想避免使用它.
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
let decimal = Decimal(integerLiteral: 3)
let string = formatter.string(from: decimal as NSDecimalNumber)
Run Code Online (Sandbox Code Playgroud)
这是实现我自己的扩展需要一个理想的解决方法Decimal
吗?
extension NumberFormatter {
open func string(from number: Decimal) -> String? {
return string(from: number as NSDecimalNumber)
}
}
Run Code Online (Sandbox Code Playgroud)
更一般地说,每次我需要传入一个对象类型我是否需要桥接Decimal
或编写更多扩展?
编辑
我想我更喜欢NSDecimal
Decimal
和NSDecimalNumber
Swift 3一样.我根本不清楚这里发生了什么.我应该替换NSDecimalNumber
用Decimal
的斯威夫特3?文档写道:
Swift覆盖到Foundation框架提供了Decimal结构,该结构桥接到NSDecimalNumber类.Decimal值类型提供与NSDecimalNumber引用类型相同的功能,并且这两者可以在与Objective-C API交互的Swift代码中互换使用.此行为类似于Swift如何将标准字符串,数字和集合类型桥接到其对应的Foundation类.
起初我以为意味着Decimal
是新的NSDecimalNumber
一样Error
是新的NSError
-但现在我不那么肯定.这也说'十进制值类型提供与NSDecimalNumber引用类型相同的功能' - 这是真的吗?我似乎无法获得相同的功能(首先没有桥接,当然,这是他们的意思吗?).我在这里和那里找到了一些帖子和一些信息,但没有任何令人信服的信息.有没有人有任何知识或见解? …
我正在尝试为我拥有的协议类型创建一个闭包,但是我收到以下错误
静态成员'menuItemSorter'不能用于协议元类型'MenuItem.Protocol'
这是我试图在操场上运行的代码的简化版本.
protocol MenuItem {
var order: Int {get}
}
extension MenuItem {
static var menuItemSorter: (MenuItem, MenuItem) -> Bool {
return { $0.order < $1.order }
}
}
class BigItem : MenuItem {
var order: Int = 1
}
let bigItems = [BigItem(), BigItem()]
let sorter = MenuItem.menuItemSorter
Run Code Online (Sandbox Code Playgroud)
我希望能够在MenuItem上有一个类/静态var方法,可以对menuItems进行排序,这是最好的方法吗?
我想弄清楚Xcode在Swift中的新UI测试中在分段控件上选择了哪个段.
我可以获得segmentedControl XCUIElement,以及与之关联的"按钮",但我不确定如何测试所选属性.
如果这是我错过的显而易见的事,请提前抱歉.
我希望测试暂停并等待元素出现在屏幕上然后再继续.
我没有看到为此创建期望并等待使用的好方法
public func waitForExpectationsWithTimeout(timeout: NSTimeInterval, handler: XCWaitCompletionHandler?)
Run Code Online (Sandbox Code Playgroud)
创造我一直在使用的期望的方法一直是
public func expectationForPredicate(predicate: NSPredicate, evaluatedWithObject object: AnyObject, handler: XCPredicateExpectationHandler?) -> XCTestExpectation
Run Code Online (Sandbox Code Playgroud)
但这需要一个已经存在的元素,而我想让测试等待一个尚不存在的元素.
有谁知道最好的方法吗?
我正在使用UITableViews,我想找到与单元格内的控件或静态文本对应的单元格.
更一般地说,找到给定元素的任何父级或兄弟的好方法将是很好的知道.
现在我只是循环遍历细胞,直到找到正确的细胞,我想避免.我尝试过使用app.tables.cells.containingPredicate
,但没有运气.
let pred = NSPredicate { (element, bindings: [String : AnyObject]?) -> Bool in
return element.staticTexts["My Text"].exists
}
let cells = app.tables.cells.containingPredicate(pred)
Run Code Online (Sandbox Code Playgroud)
传递给谓词块的元素是XCElementSnapshot,它没有staticTexts.
编辑
James是正确的,containsType:identifier:方法效果很好.
在快速,它看起来像这样
let cell = app.tables.cells.containingType(.StaticText, identifier: "My Text")
Run Code Online (Sandbox Code Playgroud)
如果方法签名中的标识符与元素的标识符属性不对应,那么它只是通过括号中的文本访问元素的常规方式.
app.cells.staticTexts["My Text"]
Run Code Online (Sandbox Code Playgroud) 我正在使用xcode中的swift自动执行UI测试,并且需要始终禁用硬件键盘进行测试。有没有一种方法可以确保在没有人工干预的情况下禁用硬件键盘,即命令行脚本?这些UI测试将在构建服务器上运行,因此不希望手动启动模拟器并关闭硬件键盘。
我已经看过与模拟器进行交互的xcrun simctl选项,但是我还无法弄清楚该怎么做。另外,我发现了几条SO帖子,表明我试图做的事情是不可能的,但是我不确定这些帖子是否在问我在问什么。
我可以通过外壳程序脚本将iOS模拟器的硬件键盘设置为关闭吗?
我想看看我的新创建的本地分支是否存在于远程控制器上,并带有一行命令.就像制作允许我输入的别名或功能一样
git remoteExists <branchName>
Run Code Online (Sandbox Code Playgroud)
现在我手动列出遥控器上的每个分支,并检查我的本地分支是否存在.这并不像我想的那么容易,因为我们的遥控器有数百个分支,许多具有相似的名称.
我正在切换分支,经常处理不同的事情,一次可能是6-7,而且很难记住我是否完成并推动了一个分支,或者我是否还需要完成它.
我已经搜索并找到了一些方法来做类似的事情,但许多似乎不必要地复杂,有没有更简单的方法来做到这一点?
编辑
要清楚我在做什么.我从一个远程分支机构开始,然后关闭它.我正在改变我当地的分支并推动.我不想设置上游分支,因为我不再使用这个分支; 处理远程分支的人员将查看我的更改并将它们集成到远程版本中.
这有效:
git diff <branchName> remotes/origin/<branchName>
Run Code Online (Sandbox Code Playgroud)
致命:模糊的参数'remotes/origin/TestReadyBranch':未知的修订或路径不在工作树中.使用' - '将路径与修订版分开,如下所示:'git [...] - [...]'
看到这个错误后,我会知道遥控器上不存在分支.有更清洁的方法吗?
当我运行我的XCTests时,我想自动重新运行一次任何失败的集成(单元/ ui)测试.这可能吗?
这将在同一测试中完成,而不必在我的测试或测试的任何部分再次点击"运行".我正在从命令行运行所有测试.
我正在进行使用网络调用服务器的UI测试.如果存在严重的服务器问题,则测试将/应该失败并报告错误.但是,如果它只是请求的临时问题,那么自动重新运行测试并查看它是否通过将会很好.此外,随着Xcode UI测试的当前状态,有一些偶然的问题,它会因为一个不明原因而崩溃,并且自动重新运行测试以查看它是否第二次通过将是很好的.
如果它可以输出发生的事情,那将是特别好的,即"测试失败第一次,因为失败得到刷新快照,但第二次通过"
我想找一个UIView XCUIElement,但我似乎找不到它.这个UIView用于向用户显示某些信息,我需要能够在某些情况下测试它是否在屏幕上.我将view.userInteractionEnabled设置为YES.
我已经尝试点击'记录'并选择它,但它似乎不可选,因为当我点击它时它不会编写代码来找到它.
我已尝试以编程方式定位它,但XCUIElementType Any和Other似乎没有找到它,我没有看到更合适的View.
我已经尝试在故事板中设置可访问性,但是在运行单元测试时,所有可访问性似乎都消失了.
这似乎应该是非常基本的,如果我在这里错过了什么,那就很抱歉.
我正试图通过跟随帖子中提供的流程来通过用户通知系统警报,这是在UI测试备忘单和SO上的一些其他帖子中提到的相同流程.
Xcode7 | Xcode UI测试| 如何处理位置服务警报?
我有一个奇怪的问题,我无法按下确定按钮.这是我的代码
addUIInterruptionMonitorWithDescription("User Notifications") { (alert) -> Bool in
let okButton = alert.buttons["OK"]
let dontAllowButton = alert.buttons["Don\u{2019}t Allow"]
print(okButton.frame)
print(dontAllowButton.frame)
okButton.tap() // Taps the dontAllowButton ??
return true
}
launchFinished() // wait for app to load and notification to show
app.tap()
Run Code Online (Sandbox Code Playgroud)
我使用后,测试成功进入处理程序,app.tap()
并且找到并存在按钮,但实际上似乎无法点击确定按钮!当我尝试点击"确定"按钮时,它会点击"不允许"按钮,当我尝试点击"不允许"按钮时,它不会点击任何内容.
按钮的框架也与屏幕上的内容不匹配.
当我调试并查看它们的帧时:
okButton =(431.5,377.0,44.0,135.0)
dontAllowBtn =(431.5,512.0,44.0,135.0)
这似乎表明它们具有相同的X值,并且一个在另一个之上,这实际上没有任何意义.
此外,我已经尝试使用XCUICoordinate
在按钮附近创建一些坐标并点击坐标而不是按钮,这对我在应用程序的其他位置工作正常,但似乎没有坐标点击注册.
我如何通过此警报?
编辑
我在使用Xcode 7.1.1,并且位置服务也出现了同样的问题.它似乎与横向模式有关,这使得它无法正常工作.当我创建一个新的测试应用程序并运行上面的代码时,它在纵向模式下工作正常.当我将其切换到横向模式时,它具有上述行为并且不起作用.
编辑2
我向Apple提交了一份错误报告.
我在该字段中有一个应用程序,该应用程序在iOS 11中的某个时间开始崩溃,并显示以下消息:
崩溃:引擎已标记为需要优化,即使它已经在进行中。
崩溃位于中的某处UIKit -> Foundation -> CoreFoundation -> libocj.A.dylib -> CoreFoundation
,但是我删除的崩溃日志已被删除,因此我所了解的不多。我通常将它们表示为符号,但是该符号仅适用于我的应用程序,不适用于库代码,因此,我需要从此处提供的字段中获取设备,以从该设备获取完整的崩溃日志。
在此之前,是否有人对导致这种崩溃的原因有任何线索,或者有任何良好的起点开始调查?
0 CoreFoundation exceptionPreprocess (in CoreFoundation) + 148
1 libobjc.A.dylib objc_exception_throw + 56
2 CoreFoundation +[NSException raise:format:] (in CoreFoundation) + 0
3 Foundation -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] (in Foundation) + 112
4 Foundation -[NSISEngine _optimizeIfNotDisabled] (in Foundation) + 320
5 Foundation -[NSISEngine tryToAddConstraintWithMarker:expression:integralizationAdjustment:mutuallyExclusiveConstraints:] (in Foundation) + 664
6 Foundation -[NSLayoutConstraint _addLoweredExpression:toEngine:integralizationAdjustment:lastLoweredConstantWasRounded:mutuallyExclusiveConstraints:] (in Foundation) + 284
7 Foundation -[NSLayoutConstraint _addToEngine:integralizationAdjustment:mutuallyExclusiveConstraints:] (in Foundation) + 272
8 UIKit -[UIView(UIConstraintBasedLayout) _layoutEngine_didAddLayoutConstraint:roundingAdjustment:mutuallyExclusiveConstraints:] (in …
Run Code Online (Sandbox Code Playgroud) 我想了解为什么这会因EXC_BAD_ACCESS
错误而崩溃.它从方法调用返回正常,但之后立即崩溃[self runMethodThatAssignsError:&error]
.
我在这里找到了类似的帖子,但它没有解释发生了什么,而且相当陈旧.
- (void)checkError {
NSError *error;
[self runMethodThatAssignsError:&error]; // crashes after returning
NSLog(@"success");
}
- (BOOL)runMethodThatAssignsError:(NSError **)error {
[@[@1] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
*error = [NSError errorWithDomain:@"1" code:7 userInfo:@{}];
}];
return NO;
}
Run Code Online (Sandbox Code Playgroud)