2015-02-17 15 views
7

Mam cel c, który akceptuje parametry "id" i chcę przekazać mu Swift Struct.jak przekazać Swift Struct jako parametr metody Objective-C

// file: ObjcClass.m

@implementation ObjcClass 
+ (void)addListener:(id)listener { 
//... do something with listener 
} 

//file DemoStruct.swift 
Struct DemoStruct { 

    func registerAsListener() { 
    ObjcClass.addListener(self) //Cant find a way to do this 
    } 

} 

Komunikat o błędzie kompilacji otrzymuję:

Type 'DemoStruct' nie jest zgodny z protokołem 'AnyObject'

Tak moje pytanie brzmiałoby: jak zrobić obiektywną metodę C, akceptując "Any" zamiast "AnyObje ct "i czy jest coś takiego?

Odpowiedz

9

Najlepszą rzeczą znalazłem zawinąć w klasie Box

public class Box<T> { 
    let unbox: T 
    init(_ value: T) { 
     self.unbox = value 
    } } 
+0

Wow, to jest eleganckie rozwiązanie. Xcode 7 beta 3. Musiałem podklasować NSObject. – neoneye

9

Nie możesz tego zrobić.

Struktury Swift nie są dostępne z Objective-C. Jest to opisane w podręczniku "Używanie książki Swift With Cocoa and Objective-C" firmy Apple:

Będziesz mieć dostęp do wszystkiego w klasie lub protokole, który jest oznaczony atrybutem @objc, o ile jest zgodny z Cel C. Wyklucza Swift-tylko oferuje takich jak te wymienione tutaj:

  • Generics
  • krotki
  • Wyliczenia określonych w Swift
  • Struktury określone w Swift
  • funkcje najwyższego poziomu określono w Swift
  • Zmienne globalne zdefiniowane w Swift
  • Typalia zdefiniowane w Swift
  • Swift stylu variadics
  • zagnieżdżone typy
  • Curried funkcje

Fragment z: Apple Inc. „Używanie Swift z kakao i Objective-C.” IBooks. https://itun.es/gb/1u3-0.l

+0

Dzięki @jrturton, co może być dobrym sposobem na ominięcie tego? może zatem jest to fikcyjna klasa opakowania? –

+0

Być może, lub obraźliwe przedstawienie, które można pominąć. Zależy od tego, czego potrzebujesz do celów na lądzie rzeczywistym. – jrturton

+0

Wprowadzono poprawkę dotyczącą dostępności funkcji dla Enums: "Wyliczenia zdefiniowane w Swift bez typu Int sur value" –

Powiązane problemy