在Swift中,是否有一种聪明的方法可以使用Array上的高阶方法返回5个第一个对象?这样做的obj-c方法是保存索引,并循环遍历数组递增索引,直到它为5并返回新数组.有没有办法做到这一点filter,map或reduce?
在XCode 6.1中运行测试时,一个令人讨厌的事情是整个应用程序必须运行并启动其storyboard和root viewController.在我的应用程序中,它运行一些获取API数据的服务器调用.但是,我不希望应用程序在运行其测试时执行此操作.
随着预处理器宏的消失,对于我的项目来说最好的是要知道它是在运行测试而不是普通的启动时启动的吗?我用CMD + U和机器人正常运行它们.
伪代码将是:
// Appdelegate.swift
if runningTests() {
return
} else {
// do ordinary api calls
}
Run Code Online (Sandbox Code Playgroud) 我有这个带有String值的枚举,它将用于告诉API方法记录服务器消息具有什么样的服务器性.我正在使用Swift 1.2,因此枚举可以映射到Objective-C
@objc enum LogSeverity : String {
case Debug = "DEBUG"
case Info = "INFO"
case Warn = "WARN"
case Error = "ERROR"
}
Run Code Online (Sandbox Code Playgroud)
我收到了错误
@objc enum raw type String不是整数类型
我没有设法找到任何说只有整数可以从Swift转换为Objective-C的地方.是这样的吗?如果是这样,有没有人有任何关于如何在Objective-C中提供这样的东西的最佳实践建议?
protocol Car {
var wheels : Int { get set}
init(wheels: Int)
}
extension Car {
init(wheels: Int) {
self.wheels = wheels
}
}
Run Code Online (Sandbox Code Playgroud)
on self.wheels = wheels我得到了错误
Error: variable 'self' passed by reference before being initialized
Run Code Online (Sandbox Code Playgroud)
如何在协议扩展中定义初始化程序?
我尝试XCUIApplication在UI测试中设置实例中的属性setUp()
let app = XCUIApplication()
app.launchEnvironment = ["testenv" : "testenvValue"]
app.launchArguments = ["anArgument"]
app.launch()
Run Code Online (Sandbox Code Playgroud)
在didFinishLaunch我运行我的UITests时,我试图在屏幕上显示这些内容
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
if launchOptions != nil {
for (key, value) in launchOptions! {
let alertView = UIAlertView(title: key.description, message: value.description, delegate: nil, cancelButtonTitle: "ok")
alertView.show()
}
}
Run Code Online (Sandbox Code Playgroud)
但我似乎无法找到我设定的论点和环境.有谁知道怎么抓住他们?
在iOS 6中是否可以知道何时UIStoryboardSegue完成了转换?就像当我在navigationcontroler上添加一个UIStoryboardSeguefrom UIButton来推送另一个UIViewController时,我希望在推送转换完成后立即执行某些操作.
class Alternative: NSManagedObject {
@NSManaged var text: String
@NSManaged var isCorrect: Bool
@NSManaged var image: NSData
}
convenience init(text: String, isCorrect: Bool, entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext!) {
let alternative = Alternative(entity: entity, insertIntoManagedObjectContext: context) as Alternative
alternative.text = text
alternative.isCorrect = isCorrect
return alternative
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个方法,让我用这个调用初始化新对象:
let newAlternative = Alternative("third platform", True, entityDescription, managedObjectContext)
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
Convenience initializer for Alternative must delegate with self.init
Run Code Online (Sandbox Code Playgroud)
我需要更改我的initalizer以使我的示例使用工作?
在Swift中,你可以打电话
let bundle = NSBundle(forClass: self.dynamicType)
Run Code Online (Sandbox Code Playgroud)
在任何类中获取当前的包.如果您NSBundle.mainBundle()在例如运行单元测试时无法获得正确的捆绑.
那么如何获得Swift的当前捆绑struct?
我有一个ndb模型类:
class Game(ndb.Model):
gameID = ndb.IntegerProperty()
gameName = ndb.StringProperty()
Run Code Online (Sandbox Code Playgroud)
有没有办法快速删除存储在数据库中的所有实体?就像是Game.deletAll()
给定一个基本的Listwith Text,我怎样才能使从屏幕左侧到右侧的整个“单元格”在 a 中可点击List,而不仅仅是“Hello world”文本?
List {
VStack {
Text("Hello world")
}
.contentShape(Rectangle())
.onTapGesture {
print("Tapped cell") // This only triggers when you directly tap the Text
}
}
Run Code Online (Sandbox Code Playgroud)