小编Sen*_*ful的帖子

在可选项中包装swift变量的简写?

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)

variables syntax casting optional swift

6
推荐指数
1
解决办法
2289
查看次数

不能在Xcode 7 UI测试目标中包含Objective-C .framework吗?

我试图依靠OHHTTPStubs作为一个框架,来自Xcode 7中的Swift UI测试目标.

我构建了.framework(通过Carthage,但我不确定它是否相关?)并将其拖入UI测试目标的Build Phases选项卡下的"带库的链接二进制文件"部分.

但是当我尝试@import OHHTTPStubs在我的.swift测试用例中时,Xcode告诉我No such module 'OHHTTPStubs'.

这应该很简单,我错过了什么?这是Github上的项目.

ios ios-frameworks carthage xcode7 xcode-ui-testing

6
推荐指数
0
解决办法
955
查看次数

Xcode 7中的UITests找到错误的"下一步"按钮

我有一个如下所示的测试:

func testNextButtonDisabled() {
  let app = XCUIApplication()
  XCTAssertFalse(app.buttons["Next"].enabled)
}
Run Code Online (Sandbox Code Playgroud)

此测试失败,因为除了我自己创建的"下一步"按钮外,键盘返回按钮标有"下一步".此测试失败并显示错误:

UI测试失败 - 找到多个匹配项

如何区分我自己的"下一步"按钮和键盘"下一步"按钮?

xcode ui-testing xctest xcode-ui-testing

6
推荐指数
1
解决办法
2838
查看次数

Xcode 7 UITesting OS X上的菜单栏应用程序

我正在尝试将XCode 7 UITesting用于像Macbox X上的Dropbox,1Password这样的菜单应用程序.这是否可以使用Xcode 7提供的最新功能自动进行UI测试?我知道UI测试适用于iOS应用程序,但是演示从未显示它是否适用于视频中的OS应用程序.如果它适用于OS X应用程序,但它是否适用于菜单栏应用程序?请指导我解决这个问题.

macos xcode-ui-testing

6
推荐指数
1
解决办法
515
查看次数

无法在旧项目上运行UI测试

我正在尝试使用Xcode 7在旧项目中添加和运行UI自动化测试.这是我做的:

  1. 添加了新的UI测试目标
  2. 将该目标的编译器版本更改为默认编译器(Apple LLVM 7.0)
  3. 使用iPhone 6 Plus iOS9模拟器录制测试(像魅力一样工作)

现在,当我尝试运行录制的测试时,我收到以下错误:

失败:捕获"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)

xcode ui-testing ios xcode7 xcode-ui-testing

6
推荐指数
1
解决办法
3463
查看次数

如何在运行Xcode UI测试时禁用自动完成?

作为我的UI测试的一部分,我正在生成一个随机字符串作为我的对象的标题.问题是,当通过键盘(使用XCUIElement.typeText())输入此标题时,iOS有时会接受自动建议的值.

例如,我可能希望它键入一个自动生成的"calg"字符串,但自动更正将改为选择"calf".当我稍后尝试使用断言查找此值时,它不存在并且未正确地失败.

有没有办法告诉UI测试他们不应该使用自动更正,或者是否有我可以使用的变通方法?

xcode ios xcode-ui-testing

6
推荐指数
2
解决办法
1517
查看次数

如何在Xcode中将对象的属性打印到调试器控制台?

我有一个使用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中的控制台和/或表达式窗口?

debugging xcode

5
推荐指数
1
解决办法
5717
查看次数

模仿Apple的UIViewAnimationOptionCurveEaseInOut数学方程式?

我想创建一个动画,看起来就像Apple的CurveEaseInOut一样具有动画效果,以便我的应用程序看起来一致。问题在于该特定动画无法使用UIView动画方法。我必须在每个帧上手动操作该位置。例如,我得到一个时间T,我需要输出该点的中心C。我希望它不像Apple那样使用线性关系(例如C = T),它可以轻松地进出。

Apple在该动画选项中使用哪个曲线方程式?

我认为曲线看起来像这样:(是从这个问题得出的)

在此处输入图片说明

如果真是这样,看来我应该能够用正确的常数调整Cubic Hermite样条方程,并获得相同的结果。问题是苹果使用哪些常量?

math animation uiviewanimation ios

5
推荐指数
1
解决办法
1850
查看次数

核心数据级联删除不可靠?

每当prepareForDelete在删除原因是级联删除规则时更新模型时,NSFetchedResultsController似乎存在错误.

这似乎意味着隐式删除(通过级联删除)的行为与显式删除的行为完全不同.

这真的是一个错误,还是你能解释为什么我看到这些奇怪的结果?


设置项目

您可以跳过整个部分并下载xcodeproj.

  1. 使用Master-Detail Application模板创建一个新项目.

  2. Event实体添加新属性.(这很重要,因为我们希望能够更新属性,而不会导致NSFetchedResultsController重新排序任何项目.否则它将发送NSFetchedResultsChangeMove事件而不是NSFetchedResultsChangeUpdate事件).

  3. 调用属性hasMovedUp,然后将其设为a Boolean.(注意:创建这样的属性可能看起来很愚蠢,但这只是一个例子,我试图将其减少到重现此bug所需的最小步骤数.)

  4. 添加一个新实体,调用它EventParent.

  5. 创建与Event的关系,调用它child.做出反向关系,称之为parent.(注意:这是1:1的关系.)

  6. 单击EventParent.单击其子关系.将其删除规则设置为级联.我们的想法是,我们只会删除父对象.删除父项后,它将自动删除其子项.

  7. 将事件的父关系"删除规则" 保留Nullify.

  8. 通过Xcode为两个实体创建NSManagedObject子类.

  9. insertNewObject:创建新事件的方法中,确保创建相应的父级.

  10. Event.m文件中,自动分配的最后一个事件的hasMovedUpYES通过声明一个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)

cascade core-data nsfetchedresultscontroller

5
推荐指数
1
解决办法
678
查看次数

如何将彩色消息记录到 Xcode 15 控制台?

Xcode 15 现在以颜色显示日志消息。例如,警告似乎以黄色显示,而标准消息则以白色显示。

我注意到Swift Log教程)也有一个配色方案:

在此输入图像描述

我是否需要在我的 iOS 应用程序中包含 Swift Log 才能以彩色输出消息,或者是否有内置方法可以做到这一点?

xcode logging ios xcode15

5
推荐指数
1
解决办法
1605
查看次数