2016-03-11 2 views
0

Я пытаюсь создать расширение для UIFont. Но это шоу ошибка описания нижеМетод 'fontWithName (_: size :)' конфликт с селектором Objective-C

Метод 'fontWithName (_: размер :) с селектором Objective-C 'fontWithName: размер:' конфликтов с предыдущей декларации с тем же селектором Objective-C

Удлинитель код класса:

import UIKit 
import Foundation 

extension UIFont { 

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

См Image *enter image description here*

+0

Так что в основном вы просто хотите сделать все шрифты приложений на 5 пунктов больше. – Crazyrems

ответ

1

Th имя метода не согласовано, потому что уже существует метод 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)! 
} 
+0

, тогда мне нужно использовать этот настраиваемый метод для установки шрифта вправо? –

+0

Да, вы будете использовать этот метод. – UIResponder

+0

как назвать этот метод? –

0

цель C не поддерживает перегрузку методов и поскольку NSFont является целью класса С, который уже имеет метод с таким именем, что приводит к конфликту. Однако, если вы все еще хотите использовать это имя для метода, вы можете проверить это решение: https://stackoverflow.com/a/31500740/1949494. В противном случае просто переименуйте этот метод.