如何传递AnyObject的参数...来函数哪个参数需要AnyObject

时间:2017-02-03 03:40:20

标签: swift arguments nsattributedstring

我正在使用

的功能
NSAttributedString(attributes: [String : AnyObject]?, format: String, arguments: AnyObject...)

我想自定义一个通用函数来调用上面的这个函数。所以我需要发送参数

  

参数:AnyObject ...

但是这个参数将成为我的自定义函数中的[AnyObject]。如何解决?

更新

当我使用代码时:

typealias Function = ([String : AnyObject]?, String, [AnyObject]) -> NSAttributedString
let myAttributedString = unsafeBitCast(NSAttributedString(attributes:format:_:) , Function.self)

会出错:

  

使用未解析的标识符' NSAttributedString(属性:格式:_:)'

更新:(临时解决方案)

我得到了一个难看的临时解决方案但对我来说已经足够了。

// NOTE: here arguments may be String or NSAttributedString
private func getAttributedString(withFormat format: String, _ arguments: AnyObject..., withUnderLine: Bool = false) -> NSAttributedString {
    var attributes = [NSFontAttributeName: #someFont,
                     NSForegroundColorAttributeName: #someColor]
     if withUnderLine {
          attributes[NSStrikethroughStyleAttributeName] = NSUnderlineStyle.StyleSingle.rawValue
     }

     switch arguments.count {
         case 0:
             return NSAttributedString(attributes: attributes, format: format)
         case 1:
             return NSAttributedString(attributes: attributes, format: format, arguments[0])
         case 2:
             return NSAttributedString(attributes: attributes, format: format, arguments[0], arguments[1])
         case 3:
             return NSAttributedString(attributes: attributes, format: format, arguments[0], arguments[1], arguments[2])
         case 4:
             return NSAttributedString(attributes: attributes, format: format, arguments[0], arguments[1], arguments[2], arguments[3])
         default:
             assert(arguments.count <= 4)
             return NSAttributedString(attributes: attributes, format: format, arguments[0], arguments[1], arguments[2], arguments[3])
         }  
     }

1 个答案:

答案 0 :(得分:1)

如果您要引用初始值设定项,则应使用NSAttributedString.init(attributes:format:_:)

完整通话变为unsafeBitCast(NSAttributedString.init(attributes:format:_:), to: Function.self)

我刚刚在iPad上尝试过与Swift Playgrounds类似的东西:

Playgrounds screenshot