2016-03-21 34 views
2

Hızlı gelişim için yeni yaşıyorum. Aslında basit bir problem ama anlayamıyorum. Her karakter için alfabedeki konumu belirlemek ve bu konumları toplamlamak istediğim bir "Dize değişkeni" değişkeni var. dize yoluyla Dolayısıyla ben döngü ve her karakter hatası alıyorumSwift: İndeksi int olarak dönüştürün

let name1="myname" 
let sumPositions=0 

for index in 0...name1.characters.count-1{ 
sumPositions+="ABCDEFGHIJKLMNOPQRSTUVWXYZ".characters.indexOf(name1.startIndex+index); 
} 

için indexOf() kullanın "İkili operatör '+' türü 'indeks' aka 'String.characterView.index' işlenenler için uygulanamaz ve 'Int'. Bu benim 'Int' için 'endeksini' döküm gerektiği anlamına gelir ama bunun için bir çözüm bulamadık.

+0

Olası yinelenen [ Metin swift2] 'deki her bir harfe bir sayı uygulayın (http://stackoverflow.com/questions/35927148/apply-a-number-to-each-letter-in-text-swift2). (Veya: [Değerleri atarken Swift ile alfabenin tamamını nasıl değiştirebilirim?] (Http://stackoverflow.com/questions/28889172), önceki bağlantının ikinci kopyası olup olmamasına bağlı olarak) – dfri

cevap

1

Leo Dabus bu post

extension String { 
    var letterValue: Int { 
     return Array("abcdefghijklmnopqrstuvwxyz".characters).indexOf(Character(lowercaseString)) ?? 0 
    } 

    var wordValue: Int { 
     // I prefer to use reduce 
     return characters.reduce(0) { $0 + String($1).letterValue } 
    } 
} 

let name1 = "myname" 
print(name1.wordValue) // 65 
+0

Bunu başka bir gönderinin cevabını çoğaltmak yerine kopya olarak işaretlememiz daha iyi olur mu? Q, örn. [bağlandığınız konu] (http://stackoverflow.com/questions/28889172/how-do-i-cycle-through-the-entire-alphabet-with-swift-while-assigning-values) veya özel kullanım durumu word -> harfler toplamı, [bu konu] (http://stackoverflow.com/questions/35927148/apply-a-number-to-each-letter-in-text-swift2/35927473#35927473) . – dfri

+0

Yea, bir daha asla yinelenen olarak nasıl işaretleneceğini inceledim. Gördün mü, bunu zaten yaptın, sanırım bırakacağım? :) – Eendje

+0

Ah, endişeleniyorum! Sen (sadece bir oy-çoğaltmak: 20k rep kadar dupehammer yok, inanıyorum) bir "mümkün - kopyalamak" tuşuna basarak bir olası bir kopyalamak ve işaretlediğiniz kişinin olduğuna inandığınız konuya yapıştırın bir kopyası olmak. – dfri

1

bunun için güzel bir uzantıya sahip Böyle çalışamaz. Benim önerim, bir dizi oluşturmanızdır. alfabe, adından harflerin bir dizi, o zaman mektup indeksini bulmak için indexOf kullanmak gelen harflerin, o zaman dizinin içeriğini özetlemek dizideki tüm indisleri ekleyin: ait

let alphabetArray = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".lowercaseString.characters.map { String($0) } // ["a", "b", "c", "d", "e", "f", "g", ...] 

let name1 = "myname" 
let nameArray = name1.lowercaseString.characters.map { String($0) } // ["m", "y", "n", "a", "m", "e"] 

var positions = [Int]() 

for nameLetter in nameArray { 
    if let index = alphabetArray.indexOf(nameLetter) { 
     positions.append(index) 
    } 
} 

print(positions) // [12, 24, 13, 0, 12, 4] 

let sum = positions.reduce(0, combine: +) // 65