Function 関数

class_addMethod(_:_:_:_:)

Adds a new method to a class with a given name and implementation. 新しいメソッドをある与えられた名前と実装をもつクラスに加えます。

Declaration 宣言

func class_addMethod(_ cls: AnyClass?, 
                   _ name: Selector, 
                   _ imp: IMP, 
                   _ types: UnsafePointer<CChar>?) -> Bool

Parameters パラメータ

cls

The class to which to add a method.

name

A selector that specifies the name of the method being added.

imp

A function which is the implementation of the new method. The function must take at least two arguments—self and _cmd.

types

An array of characters that describe the types of the arguments to the method. For possible values, see Objective-C Runtime Programming Guide > Type Encodings. Since the function must take at least two arguments—self and _cmd, the second and third characters must be “@:” (the first character is the return type).

Return Value 戻り値

true if the method was added successfully, otherwise false (for example, the class already contains a method implementation with that name).

Discussion 解説

class_addMethod(_:_:_:_:) will add an override of a superclass's implementation, but will not replace an existing implementation in this class. To change an existing implementation, use method_setImplementation(_:_:).

An Objective-C method is simply a C function that take at least two arguments—self and _cmd. For example, given the following function:


void myMethodIMP(id self, SEL _cmd)
{
    // implementation ....
}

you can dynamically add it to a class as a method (called resolveThisMethodDynamically) like this:


class_addMethod([self class], @selector(resolveThisMethodDynamically), (IMP) myMethodIMP, "v@:");

See Also 参照

Working with Classes クラスを扱う