2016-03-21 23 views
2

私は迅速な開発に新しいです。実際には簡単な問題ですが、わかりません。 私は各文字のアルファベットの位置を決定し、これらの位置を合計したい文字列変数 "name1"を持っています。文字列によるそのためにはIループとすべての文字、私はエラーを取得するスイフト:インデックスをintに変換

let name1="myname" 
let sumPositions=0 

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

のためのindexOf()を使用して「バイナリ演算子は、 『+』型 『インデックス』別名 『String.characterView.index』のオペランドに適用することはできないと「int型。 これは私が「のInt」に「インデックス」をキャストしなければならないことを意味が、私はこのための解決策を見つけることができませんでした。

+0

可能な重複テキストswift2の各文字に数字を適用する(http://stackoverflow.com/questions/35927148/apply-a-number-to-each-letter-in-text-swift2)。 (または:前のリンクが後者の複製であるかどうかに応じて[値を割り当てるときにスウィフトでアルファベット全体をどのように循環させるのですか?](http://stackoverflow.com/questions/28889172) – dfri

答えて

1

レオDabusこの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

はありません別の投稿からの回答を複製するのではなく、この記事を重複としてマークする方が良いでしょうか? Qは、例えば、 [リンク先のスレッド](http://stackoverflow.com/questions/28889172/how-do-i-cycle-through-the-entire-alphabet-with-swift-while-assigning-values)、または単語の特定の使用例 - 文字の合計、[このスレッド](http://stackoverflow.com/questions/35927148/apply-a-number-to-each-letter-in-text-swift2/35927473#35927473) 。 – dfri

+0

しかし、私は重複として1つをマークする方法を見たことはありません。私はあなたがすでにそれをしているのを見ますので、私はそれを推測するままにしておきますか? :) – Eendje

+0

ああ、わかりました、心配しないでください!あなたは '' close - > duplicate of''を押すことによって(重複して投票:20,000人まで、私は信じています)、重複している可能性のある投稿を記入し、マークしていると思われるスレッドにリンクを貼り付けることができますの複製であること。 – dfri

1

で、このための素敵な拡張子を持っています私の提案は、あなたが配列を作成することですその後、あなたは手紙のインデックスを検索しindexOfを使用し、アルファベットの文字、名前から文字の配列、の、あなたは、アレイ内のすべてのインデックスを追加し、あなたは配列の内容を合計:[の

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