Objective-C方法参数问题

mwt*_*mwt 3 parameters primitive objective-c

我试图定义一个非常简单的实用方法,这将使我不必使用计算器将RGB值定义为百分比.当我查看Apple的示例代码"QuartzCache"时,在DrawView.m文件第96行中,我看到了这一点:

float whiteColor[4] = {1, 1, 1, 1};
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试创建如下方法时,编译器讨厌我.半小时的密集谷歌搜索没有提供任何帮助.

 +(float[])percentagesRGBArray:(float[])rgbArray{

        float red = rgbArray[0];
        float green = rgbArray[1];
        float blue = rgbArray[2];
        float alpha = rgbArray[3];
        red = red/255;
        green = green/255;
        blue = blue/255;
        alpha = alpha;
        float percentagesRGBArray[4] = {red, green, blue, alpha};


        return  percentagesRGBArray;
    }
Run Code Online (Sandbox Code Playgroud)

定义这种方法的正确方法是什么?我在这做错了什么?

dre*_*lax 5

定义一个struct包含所有组件的组件,或者将每个组件包装在一个组件中NSNumber.或者,使用NSColor实例来包含颜色组件.

  • struct 办法:

    typedef struct
    {
        float red;
        float green;
        float blue;
        float alpha;
    } MyColor;
    
    - (MyColor) percentagesRGBArray:(MyColor) incoming
    {
        MyColor result;
        result.red = incoming.red / 255;
        result.green = incoming.green / 255;
        result.blue = incoming.blue / 255;
        result.alpha = incoming.alpha;
        return result;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • NSNumber 办法:

    - (NSArray *) percentagesRGBArray:(float[]) rgbArray
    {
        NSNumber *red = [NSNumber numberWithFloat:rgbArray[0] / 255];
        NSNumber *green = [NSNumber numberWithFloat:rgbArray[1] / 255];
        NSNumber *blue = [NSNumber numberWithFloat:rgbArray[2] / 255];
        NSNumber *alpha = [NSNumber numberWithFloat:rgbArray[3]];
    
        return [NSArray arrayWithObjects:red, green, blue, alpha, nil];
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • NSColor 办法:

    - (NSColor *) percentagesRGBArray:(float[]) rgbArray
    {
        CGFloat red = rgbArray[0] / 255;
        CGFloat green = rgbArray[1] / 255;
        CGFloat blue = rgbArray[2] / 255;
        CGFloat alpha = rgbArray[3];
    
        return [NSColor colorWithDeviceRed:red
                                     green:green
                                      blue:blue
                                     alpha:alpha];
    }
    
    Run Code Online (Sandbox Code Playgroud)