CGFloat, CGSize, minFontSize 등에 대한 기본값래퍼 함수에서
-
24-12-2019 - |
문제
나는 엄청난 양의 코드를 가지고 있습니다. 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 및 ActualFontSize를 설정해야 하는 기본값은 무엇입니까?본질적으로 나는 다음에 대해 동일한 결과를 원합니다.
[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
}
모든 '기본값' 값은 nil로 설정됩니다.을 위한 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)