2015-06-16 2 views
1

В дикой природе существует множество примеров того, как связать методы экземпляра в категории objc, но мне еще предстоит найти способ привязки метода класса. Например, если у меня есть эта категория:Метод класса класса Xamarin iOS

@interface UIColor (Awesome) 
+ (UIColor *)colorFromHex:(NSString *)hex; 
@end 

И если я пытаюсь связать это следующим образом:

[Category, BaseType(typeof(UIColor))] 
interface UIColor_Awesome 
{ 
    [Static, Export ("colorFromHex:")] 
    UIColor ColorFromHex(string hex); 
} 

я получу этот метод после того, как магия генерации кода Xamarin, случается:

public static UIColor ColorFromHex (this UIColor This, string hex) 

И я понятия не имею, что делать с первым arg - у меня нет экземпляра для вызова этого метода. Как правильно написать APIDefinition для этой ситуации или как использовать сгенерированный метод?

Спасибо

ответ

-1

Это является extension method. Они позволяют вам расширять/расширять класс без необходимости подкласса или без кода для него. This будет экземпляром класса, на который они вызываются.

var color = new UIColor(); // or some reference to a UIColor 
var newColor = color.ColorFromHex("#FF0000"); 

или вы можете использовать его как статический метод (даже если это не так, как они предназначены):

var color = new UIColor(); 
var newColor = UIColor.ColorFromHex(color, "#FF0000"); 

Here еще один вопрос о получении шестнадцатеричного цвета от UIColor.

* Отказ от ответственности, я не скомпилировал код.

+0

Таким образом, решение заключается в создании экземпляра заглушки? – Emil

+0

Главный вопрос, как использовать метод расширения или вы действительно хотите узнать, как преобразовать гексагон в цвет ui? – valdetero

+0

Главный вопрос заключается в том, как связать метод класса в категории, в качестве примера использовались цвета. На всякий случай методы класса не имеют экземпляра для работы с – Emil

0

Возможно, это помогает другому человеку.

Редакцией:

У меня была такая же проблема, я связыванием метод в категории.

Затем я нашел решение, размещенное here, которое просто добавляет метод к конструктору «базового класса».

В моем случае у меня была категория UIView, что равнозначно вопросу. Вы просто должны удалить слово «категория».

После вопроса на Эмиля:

[BaseType(typeof(UIColor))] 
interface UIColor_Awesome 
{ 
    [Static, Export ("colorFromHex:")] 
    UIColor ColorFromHex(string hex); 
} 
+0

Пожалуйста, не публикуйте ссылку на другую сторону, если есть решение, разместите ее здесь! –

+0

Спасибо за информацию, я обновил ответ. – debiasej

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