2015-10-24 4 views
2

Я разрабатываю приложение, чтобы увеличить немного больше знаний о быстром. Один из моих вопросов, если можно делегировать необязательную функцию со структурой в качестве аргумента.Делегировать структуру в быстрой?

Что да Im в состоянии сделать:

@objc protocol someProtocol { 
    optional func optionalFunc(someClass: someClass) 
} 

class someClass: NSObject { 

} 

Но то, что я хочу сделать (проблемы, представляющие структуру в ObjC):

@objc protocol someProtocol { 
    optional func optionalFunc(someStructure: someStructure) 
} 

struct someStructure { 

} 

И Im не в состоянии найти способ решите эту проблему.

И другая вещь, которую я хочу, это похоже на это, но с перечислений вместо структур:

@objc protocol someProtocol { 
    optional func optionalFunc(someEnum: someEnum) 
} 

enum someEnum { 
    case example  
} 

Если кто-то может мне помочь, я буду очень благодарен!

Большое спасибо! Luciano!

+0

Является ли «someStructure» вашей собственной пользовательской структурой? Поэтому вам нужно написать struct в файле .h. – pebble8888

ответ

0

Swift 2.0 позволяет выполнять стандартные протоколы по умолчанию.

protocol someProtocol { 
    func optionalFunc(someStructure: SomeStructure) 
} 

extension someProtocol { 
    func optionalFunc(someStructure: SomeStructure){ 
     // optional, leave empty 
    } 
} 

struct SomeStructure { 

} 

Таким образом, вы можете обойтись без дополнительного украшения и делать то, что хотели.

+0

Он отлично работал, спасибо! –

0

Вы не можете передавать параметры как struct или enum, так как он действителен только для языка Swift, поэтому он не может быть представлен в Objective-C.

Другой подход, вы можете объявить функцию как переменную вместо func:

protocol someProtocol { 

    var optionalFunc: (someStructure) ->()? { get set} 
} 

Реализация:

class someClass : someProtocol { 
    var optionalFunc: (someStructure) ->()? = { yourStruct in 
     // Do anything with yourStruct 
     return 
    } 
} 

Использование:

var someVar:someClass = someClass() 
var result = someVar.optionalFunc(someStructure()) 

В результате ()?. Если вы не реализуете переменную, результат будет nil

Смежные вопросы