如何将swift文件导入到objective-c类,用于类授权?

时间:2017-04-11 11:46:13

标签: ios objective-c swift objective-c-swift-bridge

我正在使用swift进行开发,现在很少有我的旧文件是用objective-c编写的。所以我为班级沟通创造了桥梁。

我的一个委托类是用objective-c编写的,现在我想知道哪个是调用我的委托的当前类。

我正在尝试 isKindOfCalss ,它的火灾就像找不到像标识这样的错误。一旦我将swift文件错误更改导入转发声明。

我有什么建议可以满足这种需求吗?

在我的情况下,导入也不起作用,请参阅附件图片。

enter image description here

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:0)

Haven之前没有遇到过您的问题,但我建议您在没有 isKindOfClass 的情况下重写此代码。你可以从基类中使用一些返回的枚举,然后检查它

open import Relation.Nullary
open import Relation.Nullary.Negation
open import Data.Empty
open import Data.Unit
open import Relation.Binary.PropositionalEquality
open import Data.Nat

suc-inj : (n m : ℕ) → (suc n) ≡ (suc m) → n ≡ m
suc-inj n .n refl = refl

record Eq (A : Set) : Set₁ where
  constructor mkEqInst
  field
    _decide≡_ : (a b : A) → Dec (a ≡ b)
open Eq {{...}}

mutual
  data FinSet (A : Set) {{_ : Eq A}} : Set where
    ε   : FinSet A
    _&_ : (a : A) → (X : FinSet A) → .{p : (a ∉ X)} → FinSet A

  _∉_ : {A : Set} → {{p : Eq A}} → (a : A) → FinSet A → Set
  a ∉ ε = ⊤
  a ∉ (b & X) with (a decide≡ b)
  ...            | yes _ = ⊥
  ...            | no  _ = a ∉ X

decide∉ : {A : Set} → {{_ : Eq A}} → (a : A) → (X : FinSet A) → Dec (a ∉ X)
decide∉ a ε = yes tt
decide∉ a (b & X) with (a decide≡ b)
...                  | yes _ = no (λ z → z)
...                  | no  _ = decide∉ a X

instance
  eqℕ : Eq ℕ
  eqℕ = mkEqInst decide
    where decide : (a b : ℕ) → Dec (a ≡ b)
          decide zero zero = yes refl
          decide zero (suc b) = no (λ ())
          decide (suc a) zero = no (λ ())
          decide (suc a) (suc b) with (decide a b)
          ...                       | yes p = yes (cong suc p)
          ...                       | no  p = no (λ x → p ((suc-inj a b) x))

test : FinSet ℕ
test = _&_ zero ε

我没有查看代码,但是,假设您已经有了这个想法

编辑:

我的意思是,您可以在代码中使用下一个EnumSubstitution,而不是编写

@objc enum EnumSubstitution: Int {
    // several options
}

protocol YourDelegateProtocol {
   // your methods
   var enumSubstitutionForIsKindOf: EnumSubstitution {get}
}

你只需使用

if ([self.delegate isKindOfClass: [yourClass class]])

等等

答案 1 :(得分:0)

从你的回答看起来你的导入语句缺少Swift中的大写字母S.

尝试更改

#import "HomeVC-swift.h" 

#import "HomeVC-Swift.h"

答案 2 :(得分:-1)

这是关于在Objective-C代码中包含Swift代码的文档:

Mix and match

归结为使用此样式导入:

#import "ProductModuleName-Swift.h”

你似乎已经在做了什么。确保使用正确的模块名称。 module的定义是:

  

模块是一个代码分发单元 - 一个框架或应用程序,它作为一个单元构建和发布,可以通过Swift的import关键字由另一个模块导入。

     

Xcode中的每个构建目标(例如应用程序包或框架)在Swift中被视为一个单独的模块。如果将应用程序代码的各个方面组合在一起作为一个独立的框架 - 也许是为了跨多个应用程序封装和重用该代码 - 那么在该框架中定义的所有内容都将在导入并在应用程序中使用时成为单独模块的一部分,或者在另一个框架中使用它时。

如果您仍然遇到问题,我建议您对项目中的每个模块执行full clean and build,您可能会收到一些错误且未正确加载的部分。