2017-11-14 6 views
0
internal func rangeFromNSRange(_ nsRange: NSRange) -> Range<String.Index>? { 
    let from16 = utf16.startIndex.advanced(by: nsRange.location) 
    let to16 = from16.advanced(by: nsRange.length) //advanced(by:) is unavailable 
    if let from = String.Index(from16, within: self), 
     let to = String.Index(to16, within: self) { 
     return from ..< to 
    } 
    return nil 
} 

4 Iは、迅速3でこのファイルを持っていると私は4迅速に変換しようとしているが、私もこのエラーとこのエラーが出る「(:)だけ前進」への迅速な3から利用できない変換があるSWIFT

public func height(_ width: CGFloat, font: UIFont, lineBreakMode: NSLineBreakMode?) -> CGFloat { 
     var attrib: [String: AnyObject] = [NSAttributedStringKey.font.rawValue: font] 
     if lineBreakMode != nil { 
      let paragraphStyle = NSMutableParagraphStyle() 
      paragraphStyle.lineBreakMode = lineBreakMode! 
      attrib.updateValue(paragraphStyle, forKey: NSAttributedStringKey.paragraphStyle.rawValue) 
     } 
     let size = CGSize(width: width, height: CGFloat(Double.greatestFiniteMagnitude)) 
     return ceil((self as NSString).boundingRect(with: size, options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes:attrib, context: nil).height) 
    } 

// '[文字列:ANYOBJECT]' 型の値を変換できません期待引数の型に '[NSAttributedStringKey:任意]?

+0

あなたは 'boundingRect'パラメータとして表示されている' attrib 'とは何ですか? –

+0

私の質問をもう一度確認してください – leo0019

+1

'rawValue'を削除してください。したがって、あなたの 'attrib'変数は' [.font:font] 'でなければなりません。 –

答えて

3
  1. はスイフト4でRange<String.Index>NSRangeから、およびその逆にするAPIがあります。 String拡張文字列属性のタイプはStringからNSAttributedStringKeyに変更されたスイフト4で

    internal func range(from nsRange: NSRange) -> Range<String.Index>? { 
        return Range(nsRange, in: self) 
    } 
    
  2. に低減することができます。例えば、NSForegroundColorAttributeNameNSAttributedStringKey.foregroundColorに置き換えられます。あなたはattrib

    var attrib: [NSAttributedStringKey: Any] = [.font: font] 
    

    への宣言を変更し、それに応じて属性を追加する行を変更する必要があります。

関連する問題