UITextInputMode.activeInputModes() crashes in Swif

2020-04-07 19:40发布

I want to get UITextInputMode in Swift 2 but UITextInputMode.activeInputModes() crashes.

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

    for t in x {
        print(t)
    }

2条回答
趁早两清
2楼-- · 2020-04-07 20:26

It is a bug in Xcode 7 as mentioned HERE. Which says:

Summary:

Prior to the Xcode 7 GM, UITextInputMode.activeInputModes() returned an array of UITextInputMode 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 uses activeInputModes correctly no longer compiles, and attempting to use activeInputModes in a Playground throws an exception.

查看更多
贼婆χ
3楼-- · 2020-04-07 20:32

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.

查看更多
登录 后发表回答