方法'fontWithName(_:size :)'与Objective-C选择器冲突

时间:2016-03-11 06:57:41

标签: ios xcode swift uifont

我正在尝试为UIFont创建扩展程序。但是这个节目错误描述如下

  

使用Objective-C选择器的方法'fontWithName(_:size :)'   'fontWithName:size:'与之前的声明冲突相同   Objective-C选择器

扩展类代码:

import UIKit
import Foundation

extension UIFont {

    class func fontWithName(fontName: String, size fontSize: CGFloat) -> UIFont {
        return UIFont(name: fontName, size: fontSize + 5)!
    }
}

参见图片*enter image description here*

2 个答案:

答案 0 :(得分:1)

此方法名称未达成一致,因为init类中已存在UIFont方法。

// Returns a font using CSS name matching semantics.
    public /*not inherited*/ init?(name fontName: String, size fontSize: CGFloat)

现在,Swift会解析您的方法,并发现它与init中的默认UIFont方法类似。

// Returns a font using CSS name matching semantics.
+ (nullable UIFont *)fontWithName:(NSString *)fontName size:(CGFloat)fontSize;

尝试更改您的方法名称而不会失去其目的(名称告诉目的。)您将使您的方法有效。

示例:

func fontName(fontName: String, size fontSize: CGFloat) -> UIFont {
    return UIFont(name: fontName, size: fontSize + 5)!
}

答案 1 :(得分:0)

Objective C不支持方法重载,因为NSFont是一个Objective C类,它已经有一个带有该名称的方法,它会导致冲突。但是,如果您仍然希望将该名称用于该方法,则可以查看此解决方案:https://stackoverflow.com/a/31500740/1949494。否则只需重命名该方法。