I want to get UITextInputMode in Swift 2 but UITextInputMode.activeInputModes()
crashes.
let x = UITextInputMode.activeInputModes() // crash here
for t in x {
print(t)
}
I want to get UITextInputMode in Swift 2 but UITextInputMode.activeInputModes()
crashes.
let x = UITextInputMode.activeInputModes() // crash here
for t in x {
print(t)
}
It is a bug in Xcode 7 as mentioned HERE. Which says:
Summary:
Prior to the Xcode 7 GM,
UITextInputMode.activeInputModes()
returned an array ofUITextInputMode
instances. However, in the Xcode 7 GM, the method signature in the header file and documentation states that it returns an array of Strings, which is incorrect. As a result, code that usesactiveInputModes
correctly no longer compiles, and attempting to useactiveInputModes
in a Playground throws an exception.
I was able to work around this bug by using an Objective-C bridge.
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
From Swift, you can now call Kludge.activeInputModes() and get the correct results.