Swift允许我们使用简写符号str!来打开可选项.但是,如果我们想做相反的事情呢?
说我有一个变量:
var str = String() // String
Run Code Online (Sandbox Code Playgroud)
是否有任何简写符号将其转换为可选(即String?或String!)?
(例如,我想做类似的事情var strOptional = ?(str).)
或者,如果没有这种表示法的简写,如何将其转换为可选项而不明确提及其类型(例如我不想提及String).
换句话说,我知道我可以使用以下任何方法将变量包装为可选:
var strOptional = str as String?
var strOptional: String? = str
var strOptional = String?(str)
Run Code Online (Sandbox Code Playgroud)
......但在每种情况下,我都必须明确写出来String.
var strOptional = str as typeof?(str)如果没有简写语法,我宁愿写一些类似于:(优点是如果变量的类型在代码库中经常更改,那么更新的位置就会少一些.)
至于这个有用的实际示例,想象一下我想使用AVCaptureDevice并使用以下代码:
let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
device.lockForConfiguration(nil)
Run Code Online (Sandbox Code Playgroud)
lockForConfiguration()将在没有摄像机的设备上运行时崩溃,编译器不会警告我.原因是defaultDeviceWithMediaType可以nil根据文档[1]返回,但它被定义为返回a AVCaptureDevice!.
要修复这样的错误API,最好做以下事情:
let device = ?(AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo))
Run Code Online (Sandbox Code Playgroud)
...得到一个AVCaptureDevice?,并让编译器捕获我可能犯的任何错误.
目前,我必须诉诸于更加冗长:
let device: AVCaptureDevice? = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo) …Run Code Online (Sandbox Code Playgroud) 我试图依靠OHHTTPStubs作为一个框架,来自Xcode 7中的Swift UI测试目标.
我构建了.framework(通过Carthage,但我不确定它是否相关?)并将其拖入UI测试目标的Build Phases选项卡下的"带库的链接二进制文件"部分.
但是当我尝试@import OHHTTPStubs在我的.swift测试用例中时,Xcode告诉我No such module 'OHHTTPStubs'.
我有一个如下所示的测试:
func testNextButtonDisabled() {
let app = XCUIApplication()
XCTAssertFalse(app.buttons["Next"].enabled)
}
Run Code Online (Sandbox Code Playgroud)
此测试失败,因为除了我自己创建的"下一步"按钮外,键盘返回按钮标有"下一步".此测试失败并显示错误:
UI测试失败 - 找到多个匹配项
如何区分我自己的"下一步"按钮和键盘"下一步"按钮?
我正在尝试将XCode 7 UITesting用于像Macbox X上的Dropbox,1Password这样的菜单应用程序.这是否可以使用Xcode 7提供的最新功能自动进行UI测试?我知道UI测试适用于iOS应用程序,但是演示从未显示它是否适用于视频中的OS应用程序.如果它适用于OS X应用程序,但它是否适用于菜单栏应用程序?请指导我解决这个问题.
我正在尝试使用Xcode 7在旧项目中添加和运行UI自动化测试.这是我做的:
现在,当我尝试运行录制的测试时,我收到以下错误:
失败:捕获"NSInternalInconsistencyException","没有通过测试配置指定的目标应用程序路径:testBundleURL:file:///xxxxxxxxxxx/PlugIns/PageonceUITests.xctest/ productModuleName :( null)testsToSkip:(null)testsToRun:(null)reportResultsToIDE:no sessionIdentifier:<__ NSConcreteUUID 0x7fc818d181a0> 7045B650-CDAF-4EC9-9738-83F78E1514D8 pathToXcodeReportingSocket:(null)disablePerformanceMetrics:no treatMissingBaselinesAsFailures:no baselineFileURL:(null)targetApplicationPath:(null)targetApplicationBundleID:(null)
作为我的UI测试的一部分,我正在生成一个随机字符串作为我的对象的标题.问题是,当通过键盘(使用XCUIElement.typeText())输入此标题时,iOS有时会接受自动建议的值.
例如,我可能希望它键入一个自动生成的"calg"字符串,但自动更正将改为选择"calf".当我稍后尝试使用断言查找此值时,它不存在并且未正确地失败.
有没有办法告诉UI测试他们不应该使用自动更正,或者是否有我可以使用的变通方法?
我有一个使用Core Data代码生成器创建的对象:
.h文件:
@interface MyObject : NSManagedObject
{
}
@property (nonatomic, retain) NSString * title;
@end
Run Code Online (Sandbox Code Playgroud)
.m文件:
@implementation MyObject
@dynamic title;
@end
Run Code Online (Sandbox Code Playgroud)
我放了一个断点,现在我想将title其中一个实例(myObject)的属性打印到控制台.
当我尝试时po myObject.title,我收到错误:
没有名为title的成员.
当我尝试时po [myObject title],我收到错误:
目标不响应此消息选择器.
当我myObject.title在Expressions窗口中尝试时,我收到错误:
超出范围
...即使myObject在同一个窗口中,我也可以看到它的一些成员.
如何将对象的属性打印到Xcode中的控制台和/或表达式窗口?
我想创建一个动画,看起来就像Apple的CurveEaseInOut一样具有动画效果,以便我的应用程序看起来一致。问题在于该特定动画无法使用UIView动画方法。我必须在每个帧上手动操作该位置。例如,我得到一个时间T,我需要输出该点的中心C。我希望它不像Apple那样使用线性关系(例如C = T),它可以轻松地进出。
Apple在该动画选项中使用哪个曲线方程式?
我认为曲线看起来像这样:(是从这个问题得出的)

如果真是这样,看来我应该能够用正确的常数调整Cubic Hermite样条方程,并获得相同的结果。问题是苹果使用哪些常量?
每当prepareForDelete在删除原因是级联删除规则时更新模型时,NSFetchedResultsController似乎存在错误.
这似乎意味着隐式删除(通过级联删除)的行为与显式删除的行为完全不同.
这真的是一个错误,还是你能解释为什么我看到这些奇怪的结果?
您可以跳过整个部分并下载xcodeproj.
使用Master-Detail Application模板创建一个新项目.
向Event实体添加新属性.(这很重要,因为我们希望能够更新属性,而不会导致NSFetchedResultsController重新排序任何项目.否则它将发送NSFetchedResultsChangeMove事件而不是NSFetchedResultsChangeUpdate事件).
调用属性hasMovedUp,然后将其设为a Boolean.(注意:创建这样的属性可能看起来很愚蠢,但这只是一个例子,我试图将其减少到重现此bug所需的最小步骤数.)
添加一个新实体,调用它EventParent.
创建与Event的关系,调用它child.做出反向关系,称之为parent.(注意:这是1:1的关系.)
单击EventParent.单击其子关系.将其删除规则设置为级联.我们的想法是,我们只会删除父对象.删除父项后,它将自动删除其子项.
将事件的父关系"删除规则" 保留为Nullify.
通过Xcode为两个实体创建NSManagedObject子类.
在insertNewObject:创建新事件的方法中,确保创建相应的父级.
在Event.m文件中,自动分配的最后一个事件的hasMovedUp是YES通过声明一个prepareForDeletion事件:
NSLog(@"Prepare for deletion");
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Event"];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"timeStamp" ascending:NO];
[fetchRequest setSortDescriptors:@[sortDescriptor]];
NSArray *results …Run Code Online (Sandbox Code Playgroud)Xcode 15 现在以颜色显示日志消息。例如,警告似乎以黄色显示,而标准消息则以白色显示。
我是否需要在我的 iOS 应用程序中包含 Swift Log 才能以彩色输出消息,或者是否有内置方法可以做到这一点?