Re: Method signature hackery - lsit of type signatures?

From: Date: Sun, 27 Apr 2008 19:09:51 +0000
Subject: Re: Method signature hackery - lsit of type signatures?
References: 1 2  Groups: php.objc 
Request: Send a blank email to php-objc+get-23@lists.php.net to get a copy of this message
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 Wez Furlong wrote:
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


« previous php.objc (#23) next »