2016-09-19 4 views
1

방금 ​​Xcode 8로 업데이트하여 Swift 2.3 코드를 Swift 3으로 변환했으며 Swift 2.3에없는이 코드 줄에 오류가 있습니다.모호한 참조 : UITextField.text 오류 Swift 3

let holder:NSString! = NSString.init(string: moneyBar.text!).substring(with: NSRange.init(location: y, length: 1)) 

이제 2.3 선이 오류가없는,하지만 moneyBar.text! 오류 Ambiguous reference to member 'text'.

이것은 스위프트 3 버그로 표시되어 같은 스위프트 3에 보이는 스위프트에? 아니면 뭔가 빠졌어?

답변

1

내가 원하는 구문은 생각 :

let holder = NSString(string: moneyBar.text!).substring(with: NSRange(location: y, length: 1)) 
+0

옙은'하자 홀더 다음과 같습니다 : 여기

let holder = text[text.index(text.startIndex, offsetBy: y)]

는 편의를 위해 확장!는 NSString'의'모호한 오류 code'을 일으키는 감사합니다. –

0

당신은 너무 String 클래스의 첨자를 사용하는 것이 하나의 문자에 액세스. ,

public extension String { 

    func character(_ at: Int) -> Character { 
     return self[self.index(self.startIndex, offsetBy: at)] 
    } 

    func substring(_ r: Range<Int>) -> String { 
     let fromIndex = self.index(self.startIndex, offsetBy: r.lowerBound) 
     let toIndex = self.index(self.startIndex, offsetBy: r.upperBound) 
     return self.substring(with: Range<String.Index>(uncheckedBounds: (lower: fromIndex, upper: toIndex))) 
    } 

} 

let text = "abc" 
let holder1 = text.character(1) // b 
let holder2 = text.substring(1..<2) // b