2016-02-16 8 views
5

को नहीं बढ़ाया जा सकता है मैं लाइन myRange परगंभीर त्रुटि: किसी कारण से ENDINDEX

fatal error: can not increment endIndex

मिलता है। मुझे यह त्रुटि क्यों मिल रही है? मुझे समझ में नहीं आता कि मेरे कोड में क्या गलत है।

import UIKit 

class ViewController: UIViewController { 

@IBOutlet var drag: UIPanGestureRecognizer! 
@IBOutlet weak var currentLabel: UILabel! 
@IBOutlet weak var label1: UILabel! 
@IBOutlet weak var label2: UILabel! 
@IBOutlet weak var label3: UILabel! 
@IBOutlet weak var label4: UILabel! 
@IBOutlet weak var label5: UILabel! 
@IBOutlet weak var label6: UILabel! 
@IBOutlet weak var label7: UILabel! 
@IBOutlet weak var label8: UILabel! 
@IBOutlet weak var label9: UILabel! 

let letter = "OX" 
var currentLetter = Character!() 
var decide = 0 
var labelArray = [UILabel]() 
var moveCounter = 0 
override func viewDidLoad() { 
    super.viewDidLoad() 
    getCurrentLetter() 
    labelArray = [label1,label2,label3,label4,label5,label6,label7,label8,label9] 
} 

func getCurrentLetter() 
{ 
    let myRange = Range<String.Index>(start: letter.startIndex.advancedBy(decide), end: letter.startIndex.advancedBy(decide+1)) 
    currentLabel.text = letter.substringWithRange(myRange) 
    currentLetter = Character(letter.substringWithRange(myRange)) 
} 

func reset() { 
    decide = 0 
} 
@IBAction func dragObject(sender: UIPanGestureRecognizer) { 
    let points = sender.locationInView(view) 
    let currentPoints = currentLabel.frame.origin 
    currentLabel.center = CGPointMake(points.x, points.y) 
    for item in labelArray { 
     if CGRectContainsPoint(item.frame, points) { 
      item.text = String(currentLetter) 
      decide++ 
      drag.enabled = false 
      currentLabel.center = currentPoints 
     } else if drag.enabled == false { 
      decide++ 
      drag.enabled = true 
      currentLabel.center = currentPoints 
     } 
     if decide == 2 { 
      reset() 
     } 
     getCurrentLetter() 
     } 
    } 
} 
+0

की (http://stackoverflow.com/questions/29277746/ [ट्रिम कार्यावधि में तेजी से हो रही त्रुटि में स्ट्रिंग के बंद अंत] संभावित डुप्लिकेट के साथ की जगह

let myRange = Range<String.Index>(start: letter.startIndex.advancedBy(decide), end: letter.startIndex.advancedBy(decide+1)) currentLabel.text = letter.substringWithRange(myRange) currentLetter = Character(letter.substringWithRange(myRange)) 

ट्रिम-एंड-ऑफ-ऑफ-स्ट्रिंग-इन-स्विफ्ट-हो रही-त्रुटि-पर-रनटाइम) – thislooksfun

+0

मुझे समझ में नहीं आता है कि "स्विफ्ट में स्ट्रिंग के अंत में ट्रिम करें, रनटाइम पर त्रुटि प्राप्त करें" से कोड को कैसे लागू करें। कोड – 123558

+0

आप सही हैं, क्षमा करें। मैंने उस जवाब को बहुत जल्दी स्किम किया। अब एक वास्तविक उत्तर पोस्ट कर रहा है। – thislooksfun

उत्तर

6

आपकी समस्या है कि या तो decide या decide+1 अब स्ट्रिंग है की तुलना में है। शुक्र है, इसे ठीक करने के लिए कोड में कुछ बनाया गया है।

कोशिश

let end = letter.endIndex.advancedBy(-1, limit: letter.startIndex) //The -1 is actually required, as the 'limit:' bit does <=, not just < 
let pos = letter.startIndex.advancedBy(decide, limit: end) 
currentLetter = letter[pos] 
currentLabel.text = currentLetter 
संबंधित मुद्दे