小编Pim*_*Pim的帖子

斯威夫特:垂头丧气到已知类型

我只是想知道…

let movie = item as? Movie
Run Code Online (Sandbox Code Playgroud)

在这个例子中item是类型Movie或其他类型.如果后者movie将被赋予零值.因此movie将是类型Movie?.

现在看看下一个例子:

let movie: Movie?

movie = item as? Movie
Run Code Online (Sandbox Code Playgroud)

假设movie是一个类变量,我在其中一个类方法中赋予了一些值.

对我来说,感觉as? Movie有些多余,因为movie已经知道它是类型的Movie?.

Swift中是否有任何语法说:"将此对象向下转换为与我分配给它的对象相同的类型.如果这是一个可选类型并且向下转换失败,则分配nil."?

我希望有类似的东西:

movie = item as?
Run Code Online (Sandbox Code Playgroud)

要么

movie =? movie
Run Code Online (Sandbox Code Playgroud)

optional swift

12
推荐指数
1
解决办法
474
查看次数

键盘动画时UIInputView背景不可见

我有一个文本字段,其中包含UIInputView输入附件视图.

当我点击我的文本字段,键盘进入视图并且我可以看到附件视图的子视图,但它没有可见的背景.键盘动画完成后,UIInputView的背景将弹出视图.

在键盘动画仍在进行时,我该怎么做才能强制UIInputView的背景可见?

这是我的代码:

UIInputView *inputView = [[UIInputView alloc] initWithFrame:CGRectMake(0.0f, 0.0f,                 CGRectGetWidth(self.bounds), 44.0f) inputViewStyle:UIInputViewStyleKeyboard];

UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
button.frame = CGRectInset(inputView.bounds, 15.0f, 2.0f);
[button setTitle:@"Button" forState:UIControlStateNormal];
[inputView addSubview:button];

UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(0.0f, 0.0f, CGRectGetWidth(self.bounds), 44.0f)];
textField.inputAccessoryView = inputView;
[self addSubview:textField];
Run Code Online (Sandbox Code Playgroud)

objective-c uitextfield ios7 inputaccessoryview

8
推荐指数
1
解决办法
1014
查看次数

在Swift中模拟第三方类(Firebase)

我正在尝试单独测试我自己的一个类,它正在调用第三方类的方法:

FIRAuth.auth()?.signInAnonymously() { (user, error) in
    //
}
Run Code Online (Sandbox Code Playgroud)

我正在使用基于协议的依赖注入来实现这一点:

protocol FIRAuthProtocol {
    func signInAnonymously(completion: FIRAuthResultCallback?)
}
extension FIRAuth: FIRAuthProtocol {}

class MyClass {
    private var firAuth: FIRAuthProtocol

    init(firAuth: FIRAuthProtocol) {
        self.firAuth = firAuth
    }

    func signIn() {
        firAuth.signInAnonymously() { (user, error) in
            //
        }
    }
}

class MockFIRAuth: FIRAuthProtocol {
    var signInAnonymouslyCalled = false

    func signInAnonymously(completion: FIRAuthResultCallback? = nil) {
        signInAnonymouslyCalled = true
    }

}

class MyClassSpec: QuickSpec {
    override func spec() {
        describe("MyClass") {
            describe(".signIn()") {
                it("should call signInAnonymously() …
Run Code Online (Sandbox Code Playgroud)

unit-testing mocking firebase swift swift3

8
推荐指数
1
解决办法
730
查看次数

核心数据(魔法记录)+ WatchKit扩展+ Cocoa Touch Framework

这就是我要做的事情:

我现在有

  • 一个iPhone应用程序
  • WatchKit扩展
  • 一个Cocoa Touch Framework,它包含我所有的共享类

我想要完成的是拥有一个在我的iPhone应用程序和WatchKit Extension之间共享的持久存储(Core Data).

所以这就是我到目前为止所做的

  • 创建一个应用程序组以拥有共享容器.
  • 将核心数据模型(Model.xcdatamodeld)添加到我的Cocoa Touch Framework.
  • 在此模型中创建了一个实体
  • 为此实体创建了一个NSMangedObject子类,并添加到我的Cocoa Touch Framework中
  • 在我的Cocoa Touch Framework中添加了一个DataManager类

这是我的DataManager中的初始化程序的样子

public init() {
    let sharedContainerURL: NSURL? = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.com.company.Project")
    if let sharedContainerURL = sharedContainerURL {
        let storeURL = sharedContainerURL.URLByAppendingPathComponent("Model.sqlite")
        MagicalRecord.setupCoreDataStackWithAutoMigratingSqliteStoreAtURL(storeURL)
        let station: Station? = Station.MR_createEntity()
    }
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题

当我从iPhone应用程序的AppDelegate启动我的DataManager时,没有发生崩溃,但是station将是零.

当我用let stations: [Station]? = Station.MR_findAll() as? [Station]应用程序崩溃替换最后一行并显示以下错误:A fetch request must have an entity.

我在GitHub上搜索了所有SO和魔法记录问题,但找不到任何可以让我朝着正确方向前进的东西.非常感谢所有帮助.

cocoa-touch core-data magicalrecord swift watchkit

7
推荐指数
1
解决办法
609
查看次数

Swift Codable:使用父级的键作为值

我有一个 JSON,其 ID 在根级别:

{
    "12345": {
        "name": "Pim"
    },
    "54321": {
        "name": "Dorien"
    }
}
Run Code Online (Sandbox Code Playgroud)

我的目标是使用 Codable 创建一个同时具有 name 和 ID 属性的 User 对象数组。

struct User: Codable {
    let id: String
    let name: String
}
Run Code Online (Sandbox Code Playgroud)

我知道如何使用带有单个根级别密钥的Codable ,并且知道如何使用未知密钥。但我在这里尝试做的是两者的结合,我不知道下一步该做什么。

这是我到目前为止得到的:(您可以将其粘贴到 Playground 中)

import UIKit

var json = """
{
    "12345": {
        "name": "Pim"
    },
    "54321": {
        "name": "Dorien"
    }
}
"""

let data = Data(json.utf8)

struct User: Codable {
    let name: String
}

let decoder = JSONDecoder() …
Run Code Online (Sandbox Code Playgroud)

swift codable decodable jsondecoder

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