Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Getting around Swift 2’s lack of compatibility with vararg methods for complication text providers.
@interface CLKTextProvider (NNNCompoundTextProviding)
+ (nonnull CLKTextProvider *)nnn_textProviderByJoiningProvider:(nonnull CLKTextProvider *)provider1 andProvider:(nonnull CLKTextProvider *)provider2 withString:(nullable NSString *)joinString;
@end
@implementation CLKTextProvider (NNNCompoundTextProviding)
+ (nonnull CLKTextProvider *)nnn_textProviderByJoiningProvider:(nonnull CLKTextProvider *)provider1 andProvider:(nonnull CLKTextProvider *)provider2 withString:(nullable NSString *)joinString
{
NSString *textProviderToken = @"%@";
NSString *formatString;
if (joinString != nil) {
formatString = [NSString stringWithFormat:@"%@%@%@",
textProviderToken,
joinString,
textProviderToken];
}
else {
formatString = [NSString stringWithFormat:@"%@%@",
textProviderToken,
textProviderToken];
}
return [self textProviderWithFormat:formatString, provider1, provider2];
}
@end
@SwiftiSwift
Copy link

SwiftiSwift commented May 13, 2021

Can someone post an example how to use the init(format:_:)? @gongzhang @UInt2048

@gongzhang
Copy link

gongzhang commented May 13, 2021

let text1 = CLKSimpleTextProvider(text: "red")
text1.tintColor = .red

let text2= CLKSimpleTextProvider(text: "green")
text2.tintColor = .green

// secret sauce:
// just pass CLKTextProvider objects as arguments
let finalText = CLKTextProvider(format: "%@ and %@", text1, text2)

@SwiftiSwift
Copy link

SwiftiSwift commented May 13, 2021

Thank you very much! Just wanted to add how to use it with CLKRelativeDateTextProvider:

let myComplicationTemplate = CLKComplicationTemplateUtilitarianLargeFlat()
let dateProvider = CLKRelativeDateTextProvider()

dateProvider.date = Date()
dateProvider.calendarUnits = [.hour, .minute]
dateProvider.relativeDateStyle = .naturalAbbreviated

let finalText = CLKTextProvider(format: "GBT * %@", dateProvider)

myComplicationTemplate.textProvider = finalText

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment