2015-02-12 4 views
0

Here is a zip файлы проекта, который включает в себя детскую площадку:Почему мой код Swift работает на игровой площадке, но не в проекте Xcode?

код Детская площадка:

import Foundation 

var substitutions: [String: Array] = Dictionary<String, Array<String>>() 
var convertedString = String() 
var stringToBeConverted = String() 
var convertedPinyinSyllableArray = [String]() 

substitutions["a"] = ["ā", "á", "ǎ", "à"] 
substitutions["ɑ"] = ["ā", "á", "ǎ", "à"] 
substitutions["e"] = ["ē", "é", "ě", "è"] 
substitutions["i"] = ["ī", "í", "ǐ", "ì"] 
substitutions["o"] = ["ō", "ó", "ǒ", "ò"] 
substitutions["u"] = ["ū", "ú", "ǔ", "ù"] 
substitutions["ü"] = ["ǖ", "ǘ", "ǚ", "ǜ"] 
substitutions["v"] = ["ǖ", "ǘ", "ǚ", "ǜ"] 
substitutions["A"] = ["Ā", "Á", "Ǎ", "À"] 
substitutions["E"] = ["Ē", "É", "Ě", "È"] 
substitutions["I"] = ["Ī", "Í", "Ĭ", "Ì"] 
substitutions["O"] = ["Ō", "Ó", "Ǒ", "Ò"] 
substitutions["U"] = ["Ū", "Ú", "Ǔ", "Ù"] 
substitutions["Ü"] = ["Ǖ", "Ǘ", "Ǚ", "Ǜ"] 
substitutions["V"] = ["Ǖ", "Ǘ", "Ǚ", "Ǜ"] 

func convertPinyinNumbersToToneMarks(stringToBeConverted: String) -> String{ 

    let pinyinSyllableArray = splitStringIntoArrayOfSyllables(stringToBeConverted) 

    for singleSyllable in pinyinSyllableArray{ 
     let toneNumber = getTone(singleSyllable) 
     var singleSyllable = substituteVowelBasedOnToneNumber(singleSyllable, toneNumber) 
     singleSyllable = singleSyllable.substringToIndex(singleSyllable.endIndex.predecessor()) 
     convertedPinyinSyllableArray.append(singleSyllable) 
    } 
    convertedString = " ".join(convertedPinyinSyllableArray) 
    return convertedString 
} 

func splitStringIntoArrayOfSyllables(stringToBeConverted: String) -> [String]{ 
    return stringToBeConverted.componentsSeparatedByString(" ") 
} 

func getTone(string: String) -> Int{ 
    let characterArray: [Character] = Array(string) 
    var toneNumber: Int = String(characterArray[characterArray.count-1]).toInt()! 
    return toneNumber 
} 

func substituteVowelBasedOnToneNumber(string: String, toneNumber: Int) -> String { 
    let vowelToBeReplaced = identifyVowelToBeReplaced(string) 
    if toneNumber > 0 && toneNumber < 4 { 
     return string.stringByReplacingOccurrencesOfString(vowelToBeReplaced, withString: substitutions[vowelToBeReplaced]![toneNumber - 1]) //will error if there is no toneNumber or the vowelToBeReplaced wasn't identified. 
    } 
    else { 
     return string 
    } 
} 

func identifyVowelToBeReplaced(string: String) -> String { 
    var vowelToBeReplaced = String() 
    if string.rangeOfString("a") != nil { 
     vowelToBeReplaced = "a" 
    } 
    else if string.rangeOfString("ɑ") != nil { 
     vowelToBeReplaced = "ɑ" 
    } 
    else if string.rangeOfString("e") != nil { 
     vowelToBeReplaced = "e" 
    } 
    else if string.rangeOfString("ou") != nil { 
     vowelToBeReplaced = "o" 
    } 
    else { 
     var stringArray = Array(string)//.componentsSeparatedByString("") 
     var reversedCharacterArray = stringArray.reverse() 
     for character in reversedCharacterArray { 
      switch character { 
      case "i","o","u","v": 
       vowelToBeReplaced = String(character) 
       return vowelToBeReplaced 
      default: vowelToBeReplaced = "" 
      } 
     } 
    } 
    return vowelToBeReplaced 
} 

let convertedPinyin = convertPinyinNumbersToToneMarks("ni3 hao3") 

Этот код работает на детской площадке, но она не работает, когда я добавить его в проект.

functions.swift:

import Foundation 

func convertPinyinNumbersToToneMarks(stringToBeConverted: String) -> String{ 

    var convertedString = String() 
    var stringToBeConverted = String() 
    var convertedPinyinSyllableArray = [String]() 

    let pinyinSyllableArray = splitStringIntoArrayOfSyllables(stringToBeConverted) 

    for singleSyllable in pinyinSyllableArray{ 
     let toneNumber = getTone(singleSyllable) 
     var singleSyllable = substituteVowelBasedOnToneNumber(singleSyllable, toneNumber) 
     singleSyllable = singleSyllable.substringToIndex(singleSyllable.endIndex.predecessor()) 
     convertedPinyinSyllableArray.append(singleSyllable) 
    } 
    convertedString = " ".join(convertedPinyinSyllableArray) 
    return convertedString 
} 

func splitStringIntoArrayOfSyllables(stringToBeConverted: String) -> [String]{ 
    return stringToBeConverted.componentsSeparatedByString(" ") 
} 

func getTone(string: String) -> Int{ 
    let characterArray: [Character] = Array(string) 
    var toneNumber: Int = String(characterArray[characterArray.count-1]).toInt()! 
    return toneNumber 
} 

func substituteVowelBasedOnToneNumber(string: String, toneNumber: Int) -> String { 

    var substitutions: [String: Array] = Dictionary<String, Array<String>>() 
    substitutions["a"] = ["ā", "á", "ǎ", "à"] 
    substitutions["ɑ"] = ["ā", "á", "ǎ", "à"] 
    substitutions["e"] = ["ē", "é", "ě", "è"] 
    substitutions["i"] = ["ī", "í", "ǐ", "ì"] 
    substitutions["o"] = ["ō", "ó", "ǒ", "ò"] 
    substitutions["u"] = ["ū", "ú", "ǔ", "ù"] 
    substitutions["ü"] = ["ǖ", "ǘ", "ǚ", "ǜ"] 
    substitutions["v"] = ["ǖ", "ǘ", "ǚ", "ǜ"] 
    substitutions["A"] = ["Ā", "Á", "Ǎ", "À"] 
    substitutions["E"] = ["Ē", "É", "Ě", "È"] 
    substitutions["I"] = ["Ī", "Í", "Ĭ", "Ì"] 
    substitutions["O"] = ["Ō", "Ó", "Ǒ", "Ò"] 
    substitutions["U"] = ["Ū", "Ú", "Ǔ", "Ù"] 
    substitutions["Ü"] = ["Ǖ", "Ǘ", "Ǚ", "Ǜ"] 
    substitutions["V"] = ["Ǖ", "Ǘ", "Ǚ", "Ǜ"] 

    let vowelToBeReplaced = identifyVowelToBeReplaced(string) 
    if toneNumber > 1 && toneNumber < 4 { 
     return string.stringByReplacingOccurrencesOfString(vowelToBeReplaced, withString: substitutions[vowelToBeReplaced]![toneNumber - 1]) //will error if there is no toneNumber or the vowelToBeReplaced wasn't identified. 
    } 
    else { 
     return string 
    } 
} 

func identifyVowelToBeReplaced(string: String) -> String { 
    var vowelToBeReplaced = String() 
    if string.rangeOfString("a") != nil { 
     vowelToBeReplaced = "a" 
    } 
    else if string.rangeOfString("ɑ") != nil { 
     vowelToBeReplaced = "ɑ" 
    } 
    else if string.rangeOfString("e") != nil { 
     vowelToBeReplaced = "e" 
    } 
    else if string.rangeOfString("ou") != nil { 
     vowelToBeReplaced = "o" 
    } 
    else { 
     var stringArray = Array(string)//.componentsSeparatedByString("") 
     var reversedCharacterArray = stringArray.reverse() 
     for character in reversedCharacterArray { 
      switch character { 
      case "i","o","u","v": 
       vowelToBeReplaced = String(character) 
       return vowelToBeReplaced 
      default: vowelToBeReplaced = "" 
      } 
     } 
    } 
    return vowelToBeReplaced 
} 

Любые идеи о том, почему это произошло?

+2

Можете скопировать код в свой вопрос? Загрузка случайных файлов не очень безопасна, и было бы легче обнаружить проблему, если она правильная в вопросе. – erdekhayser

+0

Спасибо за помощь. – webmagnets

ответ

1

Кажется, вы совершили небольшую ошибку при перемещении игровой площадки в свой проект, удалите var stringToBeConverted = String() линии от convertPinyinNumbersToToneMarks, и все будет хорошо.

+0

Вау! Это сработало. Благодарю. – webmagnets

Смежные вопросы