小编Evg*_*nii的帖子

如何在Swift中提供具有错误类型的本地化描述?

我正在使用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)

但是有没有办法让它工作而不会转换为我的错误类型?

error-handling nslocalizedstring swift swift3

175
推荐指数
4
解决办法
4万
查看次数

如何在Swift中获取枚举值的名称?

如果我有一个带有原始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)

enumeration swift

145
推荐指数
9
解决办法
7万
查看次数

SecItemAdd总是在iOS 10模拟器中的Xcode 8中返回错误-34018

更新:此问题已在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)

xcode ios ios10 xcode8

102
推荐指数
4
解决办法
3万
查看次数

如何使用Carthage从Cartfile更新一个库?

我的Cartfile有很多库.当我这样做时,carthage update它会遍历所有库.这可能需要很长时间.

有没有办法用carthage更新一个库?像这样的东西?(这不起作用)

carthage update "evgenyneu/moa"
Run Code Online (Sandbox Code Playgroud)

carthage

72
推荐指数
6
解决办法
3万
查看次数

Xcode 6中是否有键盘快捷键在光标下运行单个当前测试功能?

Xcode 6中是否有键盘快捷键来运行光标下的当前测试用例?我知道我可以按Command+ u来运行所有测试.此外,我可以点击位于测试功能左侧的测试图标,或点击"测试导航器"中的图标.是否有键盘快捷键只能在光标下运行单个测试功能?

xcode unit-testing swift

52
推荐指数
2
解决办法
7265
查看次数

在Swift中运行相同代码n次的最短方法是什么?

我有一个代码,我需要n在Swift中运行几次.那个最短的语法是什么?

我目前正在使用for循环,但它是很多打字.

for i in 0..<n { /* do something */ }
Run Code Online (Sandbox Code Playgroud)

是否有更短/更好的方式n在Swift中运行相同的代码时间?

swift

49
推荐指数
7
解决办法
2万
查看次数

如何在Xcode的iOS UI测试中选择一个选择器视图项?

我有一个选择器视图,几个项目:"红色","绿色","黄色","黑色".在我的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)

xcode ios xctest swift xcode-ui-testing

41
推荐指数
3
解决办法
2万
查看次数

如何在iOS上的Swift中获取sharedApplication?

如何在Swift中从View Controller获取当前UIApplication的实例?

我收到Use of unresolved identifier 'sharedApplication'此代码的错误:

let app = sharedApplication as UIApplication
Run Code Online (Sandbox Code Playgroud)

ios swift

38
推荐指数
2
解决办法
3万
查看次数

如何在Gulp中将CSS文件的内容注入HTML?

我需要将样式表的内容插入到<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>.

html javascript css gulp

36
推荐指数
1
解决办法
2万
查看次数

如何在其他项目中重用Swift代码?

我在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+.

xcode ios swift

27
推荐指数
1
解决办法
1万
查看次数