Могу ли я расширить класс NSString в статической библиотеке и использовать его в приложении с Swift? - PullRequest
0 голосов
/ 24 мая 2018

Я расширяю NSString в моей пользовательской статической библиотеке CommonLib:

//NSString+ext.h
#import <Foundation/Foundation.h>

@interface NSString (ext)
- (BOOL)isContainsEmoji;
@end



//NSString+ext.m
#import "NSString+ext.h"

@implementation NSString (ext)
- (BOOL)isContainsEmoji{
    //Do Something...
}
@end

Поскольку CommonLib содержит некоторые файлы кода Swift, поэтому я создаю файл заголовка моста CommonLib-Bridging-Header.h в проекте CommonLib:

//in CommonLib-Bridging-Header.h
#import "NSString+ext.h"

Далее я связываю CommonLib с моим проектом приложения и создаю новый файл Node.swift в проекте приложения:

//Node.swift
import Foundation
import CommonLib

class Node{

    var name:String!
    var isBadName:Bool{
        let tmpString = name as NSString
        return tmpString.isContainsEmoji()
    }
}

Последнее, я использую его где-то в своем приложении:

//In my UIViewController class
override func viewDidAppear(...){
    super.viewDidAppear(...)

    let node = Node()
    node.name = "panda hopy"
    print("\(node.isBadName)") //Crash in this line!!!
}

На данный момент компиляция в порядке !!!Но когда я запускаю приложение, происходит сбой:

Завершение приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '- [Swift._NSContiguousString isContainsEmoji]: нераспознанный селектор, отправленный в экземпляр 0x60400084b340'

1017*

Так что-то здесь не так ???И как это исправить ???Спасибо;)

(PS: моя среда Xcode 9.3.1 swift 4.1)

1 Ответ

0 голосов
/ 25 мая 2018

Наконец, я рад исправить это Q;)

Это очень просто, добавить опцию ссылки в проект приложения:

-all_load

Все в порядке, вы можете сослаться на это:

нераспознанный селектор, отправленный в экземпляр »в статическую библиотеку, несмотря на флаг ObjC

Спасибо всем;)

...