我正在使用Swift 3语法定义自定义错误类型,我想提供一个用户友好的错误描述,该描述由对象的localizedDescription属性返回Error.我该怎么做?
public enum MyError: Error {
case customError
var localizedDescription: String {
switch self {
case .customError:
return NSLocalizedString("A user-friendly description of the error.", comment: "My error")
}
}
}
let error: Error = MyError.customError
error.localizedDescription
// "The operation couldn’t be completed. (MyError error 0.)"
Run Code Online (Sandbox Code Playgroud)
有没有办法让localizedDescription我返回我的自定义错误描述("用户友好的错误描述.")?请注意,此处的错误对象是类型Error而不是MyError.当然,我可以将对象强制转换为MyError
(error as? MyError)?.localizedDescription
Run Code Online (Sandbox Code Playgroud)
但是有没有办法让它工作而不会转换为我的错误类型?
如果我有一个带有原始Integer值的枚举:
enum City: Int {
case Melbourne = 1, Chelyabinsk, Bursa
}
let city = City.Melbourne
Run Code Online (Sandbox Code Playgroud)
如何将city值转换为字符串Melbourne?这种类型的名称内省是否可用于该语言?
像(这段代码不起作用):
println("Your city is \(city.magicFunction)")
> Your city is Melbourne
Run Code Online (Sandbox Code Playgroud) 更新:此问题已在Xcode 8.2中修复.Keychain在模拟器中工作,无需启用钥匙串共享.
为什么在Xcode 8/iOS 10模拟器中调用函数时总是收到错误-34018 ?SecItemAdd
在Xcode 8中创建一个新的单页iOS应用程序项目.运行以下代码viewDidLoad(或打开此 Xcode项目).
let itemKey = "My key"
let itemValue = "My secretive bee "
// Remove from Keychain
// ----------------
let queryDelete: [String: AnyObject] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: itemKey as AnyObject
]
let resultCodeDelete = SecItemDelete(queryDelete as CFDictionary)
if resultCodeDelete != noErr {
print("Error deleting from Keychain: \(resultCodeDelete)")
}
// Add to keychain
// ----------------
guard let valueData …Run Code Online (Sandbox Code Playgroud) 我的Cartfile有很多库.当我这样做时,carthage update它会遍历所有库.这可能需要很长时间.
有没有办法用carthage更新一个库?像这样的东西?(这不起作用)
carthage update "evgenyneu/moa"
Run Code Online (Sandbox Code Playgroud) Xcode 6中是否有键盘快捷键来运行光标下的当前测试用例?我知道我可以按Command+ u来运行所有测试.此外,我可以点击位于测试功能左侧的测试图标,或点击"测试导航器"中的图标.是否有键盘快捷键只能在光标下运行单个测试功能?
我有一个代码,我需要n在Swift中运行几次.那个最短的语法是什么?
我目前正在使用for循环,但它是很多打字.
for i in 0..<n { /* do something */ }
Run Code Online (Sandbox Code Playgroud)
是否有更短/更好的方式n在Swift中运行相同的代码时间?
我有一个选择器视图,几个项目:"红色","绿色","黄色","黑色".在我的UI测试中,我需要从中选择一个特定的项目"绿色".我正在使用Xcode 7引入的XCTest UI测试API.

到目前为止我设法做的是在单元测试中刷整整个选择器视图.它并不理想,因为它总是将拾取器视图更改为底部项目(向上滑动时).
let app = XCUIApplication()
app.launch()
app.pickers.elementAtIndex(0).swipeUp()
XCTAssert(app.staticTexts["Selected: Black"].exists)
Run Code Online (Sandbox Code Playgroud)
改变选择器视图的另一种但非常相似的方法是调用pressForDuration ... thenDragToElement,这不是我想要的.
app.pickers.elementAtIndex(0).pressForDuration(0.1, thenDragToElement: someElement)
Run Code Online (Sandbox Code Playgroud)
当我使用UI测试记录功能时,它不会记录选择器视图滚动事件.当我点击选择器视图项时它会记录:
app.pickerWheels["Green"].tap()
Run Code Online (Sandbox Code Playgroud)
但是在运行测试时这实际上并不起作用(可能是因为它需要在点击之前首先滚动选择器视图).
这是带有测试的演示应用程序.
https://github.com/exchangegroup/PickerViewTestDemo
现在可以从Xcode 7.0 beta 6中选择一个选择器视图.
app.pickerWheels["Green"].adjustToPickerWheelValue("Yellow")
Run Code Online (Sandbox Code Playgroud) 如何在Swift中从View Controller获取当前UIApplication的实例?
我收到Use of unresolved identifier 'sharedApplication'此代码的错误:
let app = sharedApplication as UIApplication
Run Code Online (Sandbox Code Playgroud) 我需要将样式表的内容插入到<head>HTML页面中.我怎么能在Gulp做到这一点?
之前(我拥有):
<head>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
Run Code Online (Sandbox Code Playgroud)
之后(我想要的):
<head>
<style>
p { color: pink; }
</style>
</head>
Run Code Online (Sandbox Code Playgroud)
请注意,我不需要将CSS内联到元素中,而只需将CSS的内容放入<head>.
我在Swift写了一堂课.我想在我写的两个独立的iOS应用程序项目中使用此代码.共享代码和应用程序都是用Swift编写的.这样做的最佳方式是什么?
我尝试在Swift中创建框架和库,然后将其作为子项目添加到我的应用程序中.在这两种情况下,我无法让应用程序看到模块.我尝试将共享模块添加到主应用程序目标的"Target Dependencies"和"Link Binary With Libraries".没有运气 - 应用程序仍然无法看到共享模块的类.
目前使用Xcode6 Beta6.
正如Konstantin Koval和Heliem指出的那样,我所需要的只是public在我的类和方法声明中,在共享模块中使用.现在一切正常,如果我使用工作区,并且我将模块添加为子项目.
我刚刚找到了一个很好的简单解决方案,用于在Swift中重用项目之间的代码.它被称为Carthage(https://github.com/Carthage/Carthage).这不是插件,因为我不以任何方式与它有任何联系,我真的很喜欢它.它适用于iOS 8+.
swift ×7
ios ×4
xcode ×4
carthage ×1
css ×1
enumeration ×1
gulp ×1
html ×1
ios10 ×1
javascript ×1
swift3 ×1
unit-testing ×1
xcode8 ×1
xctest ×1