Re: [PHP-OBJC] Method signature hackery - lsit of type signatures?
[email protected] (Carsten Lucke) Sun, 27 Apr 2008 21:13:35 +0200
| Newsgroups | php.objc |
|---|---|
| Message-ID | <[email protected]> |
Hey Wez,
that was quick! :-) Thank you! These defines were exactly what I was
looking for. I thought it had to be somewhere in the ObjC runtime but
I didn't find it anywhere in the docs. Next time I'll stick to the
header-files in the first place. ;-)
Thanks again! Keep up the great work.
Regards,
- Carsten
Am 27.04.2008 um 20:59 schrieb Wez Furlong:
> Hi Carsten,
>
> Signatures are not very well documented, at least, not well enoough
> for a casual google to yield a guide.
> /usr/include/objc/runtime.h has a set of defines like this:
>
> #define _C_ID '@'
> #define _C_CLASS '#'
> #define _C_SEL ':'
> #define _C_CHR 'c'
> #define _C_UCHR 'C'
> /* and more */
>
> so the signature you mentioned: c@: means:
>
> return type: c (the "char" type)
> first param: @ (the "id" type, which is a pointer to an obj-c
> object)
> second param: : (the "selector" type, which identifies the method
> to be invoked)
>
> the first and second parameters are almost always present; they're
> the implicit "this" and method name.
>
> Regarding when you need it... if you're working with classes defined
> by the objective C runtime, we can usually query it to work out the
> signature automatically. The delegate example needs you to hint at
> the signature, because the class is purely defined by PHP based on
> the method you've declared. Since PHP is dynamically typed, it's
> not always possible to infer the correct signature based on the
> method declaration, and more importantly, there's no way to type
> hint the return value either.
>
> Hope that helps,
>
> --Wez.
>
>
> On Apr 27, 2008, at 2:39 PM, Carsten Lucke wrote:
>
>> Hi all,
>>
>> the README contains a short explanation of the method signature
>> hackery. Where can I get an overview of what options I have here
>> (which abbreviation for which type)? I've seen the @c and also @v
>> (void?). When is it necessary to add a signature and when is it
>> not? I couldn't find anything about that...
>>
>> Any small hint is highly appreciated. Thanks a lot in advance!
>>
>> Kind regards,
>> - Carsten
>>
>>
>> > Method signature hackery
>> >
>> > The bridge isn't quite smart enough to automatically figure out
>> type mapping
>> > for everything, particularly if you are declaring a delegate
>> object that will
>> > act as a sink for events, so you will need to provide hints in
>> some cases.
>> >
>> > You can provide the hints using doc-comments like this:
>> >
>> > class MyDelegate extends NSObject {
>> > /** @objc:signature c@: */
>> > function run_() {
>> > echo "*** run!\n";
>> > }
>> > }
>> >
>> > the "c@:" part defines the return type and parameters for the
>> run_ method; it
>> > is a standard objective-C stype signature.
>>
>> --
>> PHP Objective-C Bridge Mailing List (http://www.php.net/)
>> To unsubscribe, visit: http://www.php.net/unsub.php
>>
>
>