Standardwerte für CGFloat, CGSize, minFontSize usw.in einer Wrapper-Funktion
-
24-12-2019 - |
Frage
Ich habe Code, der eine Menge hat sizeWithFont
anrufe, die ich dringend loswerden muss, da sizeWithFont veraltet ist.Jetzt habe ich irgendwie herausgefunden, wie man es benutzt boundingRectWithSize
anstatt jedoch eine Million Aufrufe erneut auszuführen, dachte ich daran, eine Wrapper-Funktion für die sizeWithFonts zu erstellen.
Also, hier ist die Methode, die ich mir ausgedacht habe :
- (CGSize) getSizeForCurrentFont:(UIFont*)font
forWidth:(CGFloat)width
constrainedToSize:(CGSize)size
lineBreakMode:(NSLineBreakMode)lineBreakMode
minFontSize:(CGFloat)minFontSize
actualFontSize:(CGFloat *)actualFontSize
{
// functionality
}
Was ich anstrebe ist, dass nur die eingestellten Werte aufgerufen werden, während der Rest der Standardwert für sie sein wird.Wenn ein Aufruf also nur Schriftart und Breite hat, wird nur diese festgelegt.Ich verstehe, dass die Schriftgröße nicht mehr unterstützt wird, aber ich würde mich über Vorschläge dazu freuen.
Meine Frage ist :auf welche Standardwerte sollte ich Schriftart, Breite, Größe, Zeilenumbruchmodus, minFontSize und actualFontSize setzen, damit ich keine seltsamen Ergebnisse erhalte.Im Wesentlichen möchte ich das gleiche Ergebnis für :
[s sizeWithFont:font
constrainedToSize:size];
wie bei :
[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#]
Sagen Sie mir, wenn weitere Klarstellungen erforderlich sind.Wenn Sie einen netten Weg vorschlagen können, um boundingRectWithSize zu machen, dann wäre das auch cool.
Lösung
Sie könnten Primitive in Objekte einwickeln?Also hättest du:
- (CGSize) getSizeForCurrentFont:(UIFont*)font
forWidth:(NSNumber*)width
constrainedToSize:(NSValue*)size
lineBreakMode:(NSNumber*)lineBreakMode
minFontSize:(NSNumber*)minFontSize
actualFontSize:(NSNumber*)actualFontSize
{
// functionality
}
Alle 'Standard'-Werte würden auf Null gesetzt.Für CGFloat
, würden Sie sie mit erstellen:
CGFloat value = 10.0f;
NSNumber* valueObj = @(value);
Für NSValue
, können Sie verwenden:
CGSize size = CGSizeMake(10.0f, 10.0f);
NSValue* sizeObj = [NSValue valueWithCGSize:size];
Die Schlüsselfrage hierbei ist, wie zwischen einem gültigen Wert und einer Abwesenheitskennung unterschieden werden kann.Normalerweise tun Sie dies entweder mit einer definierten Konstante (z NSNotFound
), aber für die Typen, die Sie aufgelistet haben, existiert so etwas nicht.Hier können Objekte helfen, da das Fehlen eines Objekts inhärent auf das Fehlen eines Wertes hinweist.
Andere Tipps
sie können eine Methode erstellen:
- (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#]
}
Dies ist die einfachste Möglichkeit, "Standardwerte" zu erstellen.
Aktualisieren Sie Swift 4.2
let size = CGSize(width: 0, height: 0)