2017-12-13 24 views
1

私はスウィフトにへ:#selector(セッター:object.font)

+ (void)setFontName:(NSString*)fontName onObject:(id)object { 
    if ([object respondsToSelector:@selector(setFont:)]) { 
     UIFont* font = [UIFont fontWithName:fontName size:((UIFont *)[object font]).pointSize]; 
     [object setFont:font]; 
    } 
} 

完全に正常に動作します。このObjective-Cのメソッド書き換えしようとしています:

public static func setFontRewriting(fontName: String, object: AnyObject) { 
    if object.responds(to:#selector(setter: object.font)) { 
     let currentFont: UIFont = object.font 
     let fontToSet = UIFont(name: fontName, size: currentFont.pointSize) 
     object.font = fontToSet //doesn't work, getting various syntax errors 
    } 
} 

オブジェクトがこのセレクタに応答しても、フォントを設定することはできません。 object.setFontもどちらも動作しません。助言がありますか?

+1

オブジェクトの型はANYOBJECTです。セッターを呼び出す前にキャストする必要があります。 – ClemensL

+1

これを読んでください:[SWIFT AND CUSTOMER OF ANYOBJECT](http://blog.scottlogic.com/2014/09/24/swift-anyobject.html)スウィフトとAnyObjectについてもう少し理解してください。 – Kevinosaurio

答えて

1

次の操作を行うことができます

object.setValue(fontToSet, forKey: "font")