UITextInputMode.activeInputModes() падает в Swift 2

Я хочу получить UITextInputMode в Swift 2, но UITextInputMode.activeInputModes() сбои.

    let x = UITextInputMode.activeInputModes() // crash here

    for t in x {
        print(t)
    }

2 ответа

Решение

Это ошибка в Xcode 7, как упоминалось ЗДЕСЬ. Который говорит:

Резюме:

До Xcode 7 GM, UITextInputMode.activeInputModes() вернул массив UITextInputMode экземпляров. Однако в Xcode 7 GM сигнатура метода в заголовочном файле и документации утверждает, что он возвращает массив строк, что неверно. В результате код, который использует activeInputModes правильно больше не компилируется и пытается использовать activeInputModes на детской площадке выдает исключение.

Я смог обойти эту ошибку с помощью моста Objective-C.

Bridge.h

#ifndef Bridge_h
#define Bridge_h

#import "Kludge.h"

#endif

Kludge.h

#ifndef Kludge_h
#define Kludge_h

#import <UIKit/UITextInput.h>

@interface Kludge : NSObject

+ (NSArray<UITextInputMode *> *)activeInputModes;

@end

#endif

Kludge.m

#import "Kludge.h"

@implementation Kludge

+ (NSArray<UITextInputMode *> *)activeInputModes {
  return (NSArray<UITextInputMode *> *)[UITextInputMode activeInputModes];
}

@end

Из Swift вы можете теперь вызывать Kludge.activeInputModes() и получать правильные результаты.

Другие вопросы по тегам