Значения по умолчанию для CGFloat, CGSize, minFontSize и т. д.в функции-обертке

StackOverflow https://stackoverflow.com//questions/22081008

Вопрос

У меня есть код, который имеет массу sizeWithFont вызовы, от которых мне нужно отчаянно избавиться, поскольку sizeWithFont устарел.Теперь я примерно понял, как использовать boundingRectWithSize Однако вместо этого, вместо повторного выполнения миллиона вызовов, я подумал о создании функции-обертки для выполнения sizeWithFonts.

Итак, вот метод, который я придумал:

- (CGSize) getSizeForCurrentFont:(UIFont*)font
                    forWidth:(CGFloat)width
           constrainedToSize:(CGSize)size
               lineBreakMode:(NSLineBreakMode)lineBreakMode
                 minFontSize:(CGFloat)minFontSize
              actualFontSize:(CGFloat *)actualFontSize
{
    // functionality
}

Я хочу, чтобы вызывались только те значения, которые установлены, а остальные будут иметь значение по умолчанию.Итак, если вызов имеет только шрифт и ширину, будет установлено только это.Я понимаю, что fontSize больше не поддерживается, но буду признателен за предложения по этому поводу.

Мой вопрос:каковы значения по умолчанию, которые мне следует установить для шрифта, ширины, размера, lineBreakMode, minFontSize и factFontSize, чтобы не получать странных результатов.По сути, я хочу тот же результат для:

[s sizeWithFont:font
constrainedToSize:size];

как с:

[s getSizeForCurrentFont:font 
forWidth:width #This is some Default Value# 
constrainedToSize:size 
lineBreakMode:lineBreakMode #This is some Default Value# 
minFontSize:minFontSize #This is some Default Value# 
actualFontSize: actualFontSize #This is some Default Value#]

Скажите мне, если требуются какие-либо дополнительные разъяснения.Если вы предложите хороший способ реализации BoundingRectWithSize, это тоже будет здорово.

Это было полезно?

Решение

Вы могли бы обернуть примитивы в объекты?Итак, у вас будет:

- (CGSize) getSizeForCurrentFont:(UIFont*)font
                    forWidth:(NSNumber*)width
           constrainedToSize:(NSValue*)size
               lineBreakMode:(NSNumber*)lineBreakMode
                 minFontSize:(NSNumber*)minFontSize
              actualFontSize:(NSNumber*)actualFontSize
{
    // functionality
}

Любые значения «по умолчанию» будут установлены на ноль.Для CGFloat, вы бы создали их, используя:

CGFloat value = 10.0f;
NSNumber* valueObj = @(value);

Для NSValue, вы можете использовать:

CGSize size = CGSizeMake(10.0f, 10.0f);
NSValue* sizeObj = [NSValue valueWithCGSize:size];

Ключевой вопрос здесь заключается в том, как отличить допустимое значение от идентификатора отсутствия.Обычно вы делаете это, используя определенную константу (например, NSNotFound), но для перечисленных вами типов такого не существует.Здесь могут помочь объекты, поскольку отсутствие объекта по своей сути указывает на отсутствие значения.

Другие советы

вы можете создать метод:

- (CGSize) sizeWithFont:(UIFont*)font constrainedToSize:(CGSize)size {
    [self getSizeForCurrentFont:font 
        forWidth:#some Default Value# 
        constrainedToSize:size 
        lineBreakMode:#some Default Value# 
        minFontSize:#some Default Value# 
        actualFontSize:#some Default Value#]
}

Это самый простой способ создания «значений по умолчанию».

Обновите Свифт 4.2

 let size = CGSize(width: 0, height: 0)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top