Skip to content

Commit 733487f

Browse files
committed
Made improvements suggested by others. These changes cause things to be done in a more Swift-like manner. Also updated the project to Xcode 8.2.
1 parent 24fa818 commit 733487f

File tree

2 files changed

+16
-20
lines changed

2 files changed

+16
-20
lines changed

Trie/Trie/Trie.xcodeproj/project.pbxproj

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@
193193
isa = PBXProject;
194194
attributes = {
195195
LastSwiftUpdateCheck = 0810;
196-
LastUpgradeCheck = 0810;
196+
LastUpgradeCheck = 0820;
197197
ORGANIZATIONNAME = "Rick Zaccone";
198198
TargetAttributes = {
199199
EB798DF91DFEF79900F0628D = {
@@ -333,6 +333,7 @@
333333
CLANG_WARN_INFINITE_RECURSION = YES;
334334
CLANG_WARN_INT_CONVERSION = YES;
335335
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
336+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
336337
CLANG_WARN_SUSPICIOUS_MOVES = YES;
337338
CLANG_WARN_UNREACHABLE_CODE = YES;
338339
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
@@ -382,6 +383,7 @@
382383
CLANG_WARN_INFINITE_RECURSION = YES;
383384
CLANG_WARN_INT_CONVERSION = YES;
384385
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
386+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
385387
CLANG_WARN_SUSPICIOUS_MOVES = YES;
386388
CLANG_WARN_UNREACHABLE_CODE = YES;
387389
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
@@ -508,6 +510,7 @@
508510
EB798E211DFEF79900F0628D /* Release */,
509511
);
510512
defaultConfigurationIsVisible = 0;
513+
defaultConfigurationName = Release;
511514
};
512515
EB798E221DFEF79900F0628D /* Build configuration list for PBXNativeTarget "TrieTests" */ = {
513516
isa = XCConfigurationList;
@@ -516,6 +519,7 @@
516519
EB798E241DFEF79900F0628D /* Release */,
517520
);
518521
defaultConfigurationIsVisible = 0;
522+
defaultConfigurationName = Release;
519523
};
520524
EB798E251DFEF79900F0628D /* Build configuration list for PBXNativeTarget "TrieUITests" */ = {
521525
isa = XCConfigurationList;
@@ -524,6 +528,7 @@
524528
EB798E271DFEF79900F0628D /* Release */,
525529
);
526530
defaultConfigurationIsVisible = 0;
531+
defaultConfigurationName = Release;
527532
};
528533
/* End XCConfigurationList section */
529534
};

Trie/Trie/Trie/Trie.swift

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -81,23 +81,19 @@ extension Trie {
8181
return
8282
}
8383
var currentNode = root
84-
let charactersInWord = Array(word.lowercased().characters)
85-
var index = 0
86-
while index < charactersInWord.count {
87-
let character = charactersInWord[index]
84+
for character in word.lowercased().characters {
8885
if let childNode = currentNode.children[character] {
8986
currentNode = childNode
9087
} else {
9188
currentNode.add(value: character)
9289
currentNode = currentNode.children[character]!
9390
}
94-
index += 1
9591
}
9692
// Word already present?
9793
guard !currentNode.isTerminating else {
9894
return
9995
}
100-
self.wordCount += 1
96+
wordCount += 1
10197
currentNode.isTerminating = true
10298
}
10399

@@ -110,13 +106,13 @@ extension Trie {
110106
return false
111107
}
112108
var currentNode = root
113-
let charactersInWord = Array(word.lowercased().characters)
114-
var index = 0
115-
while index < charactersInWord.count, let childNode = currentNode.children[charactersInWord[index]] {
116-
index += 1
109+
for character in word.lowercased().characters {
110+
guard let childNode = currentNode.children[character] else {
111+
return false
112+
}
117113
currentNode = childNode
118114
}
119-
return index == charactersInWord.count && currentNode.isTerminating
115+
return currentNode.isTerminating
120116
}
121117

122118
/// Attempts to walk to the terminating node of a word. The
@@ -127,20 +123,15 @@ extension Trie {
127123
/// search failed.
128124
private func findTerminalNodeOf(word: String) -> Node? {
129125
var currentNode = root
130-
var charactersInWord = Array(word.lowercased().characters)
131-
var index = 0
132-
while index < charactersInWord.count {
133-
let character = charactersInWord[index]
126+
for character in word.lowercased().characters {
134127
guard let childNode = currentNode.children[character] else {
135128
return nil
136129
}
137130
currentNode = childNode
138-
index += 1
139131
}
140132
return currentNode.isTerminating ? currentNode : nil
141133
}
142134

143-
144135
/// Deletes a word from the trie by starting with the last letter
145136
/// and moving back, deleting nodes until either a non-leaf or a
146137
/// terminating node is found.
@@ -180,7 +171,7 @@ extension Trie {
180171
} else {
181172
terminalNode.isTerminating = false
182173
}
183-
self.wordCount -= 1
174+
wordCount -= 1
184175
}
185176

186177
/// Returns an array of words in a subtrie of the trie
@@ -198,7 +189,7 @@ extension Trie {
198189
if rootNode.isTerminating {
199190
subtrieWords.append(previousLetters)
200191
}
201-
for (_, childNode) in rootNode.children {
192+
for childNode in rootNode.children.values {
202193
let childWords = wordsInSubtrie(rootNode: childNode, partialWord: previousLetters)
203194
subtrieWords += childWords
204195
}

0 commit comments

Comments
 (0)