2015-06-27 3 views
1

Я понимаю, что отражение не полностью поддерживается (пока) в Swift, но методы времени отражения (по-видимому) поддерживаются. Я пытаюсь получить возвращаемый тип функции во время выполнения. Вот мой примерПолучение возвращаемого типа функции в Swift

let s:Selector = "willAnimateRotation" 
var m:Method = class_getInstanceMethod(object_getClass(self), s) 
let returnType = method_copyReturnType(m) 
println("method: \(m); returnType: \(returnType)") 
free(returnType) 

Вот пример моего метода willAnimateRotation, в настоящее время возвращения строки:

private func willAnimateRotation() -> String { 
    return "abc" 
} 

Выход из этого не кажется, меняются в зависимости от типа возвращаемого селектора. Например, при использовании типа String или Void для селектора я получаю следующий вывод:

метод: 0x0000000000000000; returnType: 0x0000000000000000

Мысли?

ТАКЖЕ: Я действительно не пытаюсь это сделать в Свифт. Я соединяю класс Objective-C с Swift, и получаю там те же результаты, когда код Objective-C пытается определить тип возврата селектора Swift. То есть, моей конечной целью в этом случае является использование Objective-C для получения типа возврата селектора Swift.

+0

@ banana-- Я понимаю это. Это не мой вопрос. Мой вопрос заключается в использовании рефлексии, как вы, во время выполнения, определяете тип возврата. –

ответ

-1

В Swift вы указываете возвращаемый тип функции с помощью стрелки возврата -> (дефис, за которым следует прямоугольная скобка), за которым следует имя возвращаемого типа.

0

OK. Я понял это. Проблема связана с использованием ключевого слова «private». Если вы откажетесь от этого и используете только:

func willAnimateRotation() -> String { 
    return "abc" 
} 

Образец кода выше работает нормально.

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