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() и получать правильные результаты.