Skip to content
This repository was archived by the owner on Oct 30, 2018. It is now read-only.

Commit 31da460

Browse files
author
Ignacio Romero Zurbuchen
committed
A bit cleaner implementation of primitive Swift Array filtering, to avoid many unwrapping and casting.
1 parent d96b159 commit 31da460

2 files changed

Lines changed: 40 additions & 27 deletions

File tree

Examples/Messenger-Swift/MessageViewController.swift

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ class MessageViewController: SLKTextViewController {
1212

1313
var messages = [Message]()
1414

15-
var users = ["Allen", "Anna", "Alicia", "Arnold", "Armando", "Antonio", "Brad", "Catalaya", "Christoph", "Emerson", "Eric", "Everyone", "Steve"]
16-
var channels = ["General", "Random", "iOS", "Bugs", "Sports", "Android", "UI", "SSB"]
17-
var emojis = ["-1", "m", "man", "machine", "block-a", "block-b", "bowtie", "boar", "boat", "book", "bookmark", "neckbeard", "metal", "fu", "feelsgood"]
18-
var commands = ["msg", "call", "text", "skype", "kick", "invite"]
15+
var users: Array = ["Allen", "Anna", "Alicia", "Arnold", "Armando", "Antonio", "Brad", "Catalaya", "Christoph", "Emerson", "Eric", "Everyone", "Steve"]
16+
var channels: Array = ["General", "Random", "iOS", "Bugs", "Sports", "Android", "UI", "SSB"]
17+
var emojis: Array = ["-1", "m", "man", "machine", "block-a", "block-b", "bowtie", "boar", "boat", "book", "bookmark", "neckbeard", "metal", "fu", "feelsgood"]
18+
var commands: Array = ["msg", "call", "text", "skype", "kick", "invite"]
1919

20-
var searchResult: [AnyObject]?
20+
var searchResult: [String]?
2121

2222
var pipWindow: UIWindow?
2323

@@ -480,44 +480,46 @@ extension MessageViewController {
480480

481481
override func didChangeAutoCompletionPrefix(_ prefix: String, andWord word: String) {
482482

483-
var array: [AnyObject]?
483+
var array:Array<String> = []
484+
let wordPredicate = NSPredicate(format: "self BEGINSWITH[c] %@", word);
484485

485486
self.searchResult = nil
486487

487488
if prefix == "@" {
488489
if word.characters.count > 0 {
489-
array = (self.users as NSArray).filtered(using: NSPredicate(format: "self BEGINSWITH[c] %@", word)) as [AnyObject]?
490+
array = self.users.filter { wordPredicate.evaluate(with: $0) };
490491
}
491492
else {
492-
array = self.users as [AnyObject]?
493+
array = self.users
493494
}
494495
}
495496
else if prefix == "#" {
496497

497498
if word.characters.count > 0 {
498-
array = (self.channels as NSArray).filtered(using: NSPredicate(format: "self BEGINSWITH[c] %@", word)) as [AnyObject]?
499+
array = self.channels.filter { wordPredicate.evaluate(with: $0) };
499500
}
500501
else {
501-
array = self.channels as [AnyObject]?
502+
array = self.channels
502503
}
503504
}
504505
else if (prefix == ":" || prefix == "+:") && word.characters.count > 0 {
505-
array = (self.emojis as NSArray).filtered(using: NSPredicate(format: "self BEGINSWITH[c] %@", word)) as [AnyObject]?
506+
array = self.emojis.filter { wordPredicate.evaluate(with: $0) };
506507
}
507508
else if prefix == "/" && self.foundPrefixRange.location == 0 {
508509
if word.characters.count > 0 {
509-
array = (self.commands as NSArray).filtered(using: NSPredicate(format: "self BEGINSWITH[c] %@", word)) as [AnyObject]?
510+
array = self.commands.filter { wordPredicate.evaluate(with: $0) };
510511
}
511512
else {
512-
array = self.commands as [AnyObject]?
513+
array = self.commands
513514
}
514515
}
515516

516517
var show = false
517518

518-
if (array?.count)! > 0 {
519-
self.searchResult = (array! as NSArray).sortedArray(using: #selector(NSString.localizedCaseInsensitiveCompare(_:))) as [AnyObject]
520-
show = ((self.searchResult?.count)! > 0)
519+
if array.count > 0 {
520+
let sortedArray = array.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedAscending }
521+
self.searchResult = sortedArray
522+
show = sortedArray.count > 0
521523
}
522524

523525
self.showAutoCompletionView(show)
@@ -599,7 +601,7 @@ extension MessageViewController {
599601
cell.indexPath = indexPath
600602
cell.selectionStyle = .default
601603

602-
guard let searchResult = self.searchResult as? [String] else {
604+
guard let searchResult = self.searchResult else {
603605
return cell
604606
}
605607

@@ -668,7 +670,7 @@ extension MessageViewController {
668670

669671
if tableView == self.autoCompletionView {
670672

671-
guard let searchResult = self.searchResult as? [String] else {
673+
guard let searchResult = self.searchResult else {
672674
return
673675
}
674676

Examples/Messenger.xcodeproj/project.pbxproj

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@
422422
isa = PBXProject;
423423
attributes = {
424424
LastSwiftUpdateCheck = 0720;
425-
LastUpgradeCheck = 0700;
425+
LastUpgradeCheck = 0800;
426426
ORGANIZATIONNAME = "Slack Technologies, Inc.";
427427
TargetAttributes = {
428428
4F3EDB48199ED00F004C15D6 = {
@@ -748,14 +748,19 @@
748748
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
749749
CLANG_WARN_EMPTY_BODY = YES;
750750
CLANG_WARN_ENUM_CONVERSION = YES;
751+
CLANG_WARN_INFINITE_RECURSION = YES;
751752
CLANG_WARN_INT_CONVERSION = YES;
752753
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
754+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
755+
CLANG_WARN_UNREACHABLE_CODE = YES;
753756
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
754757
CODE_SIGN_IDENTITY = "iPhone Developer";
755758
COPY_PHASE_STRIP = NO;
759+
ENABLE_STRICT_OBJC_MSGSEND = YES;
756760
ENABLE_TESTABILITY = YES;
757761
GCC_C_LANGUAGE_STANDARD = gnu99;
758762
GCC_DYNAMIC_NO_PIC = NO;
763+
GCC_NO_COMMON_BLOCKS = YES;
759764
GCC_OPTIMIZATION_LEVEL = 0;
760765
GCC_PREPROCESSOR_DEFINITIONS = (
761766
"DEBUG=1",
@@ -768,7 +773,7 @@
768773
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
769774
GCC_WARN_UNUSED_FUNCTION = YES;
770775
GCC_WARN_UNUSED_VARIABLE = YES;
771-
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
776+
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
772777
ONLY_ACTIVE_ARCH = YES;
773778
SDKROOT = iphoneos;
774779
TARGETED_DEVICE_FAMILY = "1,2";
@@ -788,21 +793,27 @@
788793
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
789794
CLANG_WARN_EMPTY_BODY = YES;
790795
CLANG_WARN_ENUM_CONVERSION = YES;
796+
CLANG_WARN_INFINITE_RECURSION = YES;
791797
CLANG_WARN_INT_CONVERSION = YES;
792798
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
799+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
800+
CLANG_WARN_UNREACHABLE_CODE = YES;
793801
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
794802
CODE_SIGN_IDENTITY = "iPhone Developer";
795803
COPY_PHASE_STRIP = YES;
796804
ENABLE_NS_ASSERTIONS = NO;
805+
ENABLE_STRICT_OBJC_MSGSEND = YES;
797806
GCC_C_LANGUAGE_STANDARD = gnu99;
807+
GCC_NO_COMMON_BLOCKS = YES;
798808
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
799809
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
800810
GCC_WARN_UNDECLARED_SELECTOR = YES;
801811
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
802812
GCC_WARN_UNUSED_FUNCTION = YES;
803813
GCC_WARN_UNUSED_VARIABLE = YES;
804-
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
814+
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
805815
SDKROOT = iphoneos;
816+
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
806817
TARGETED_DEVICE_FAMILY = "1,2";
807818
VALIDATE_PRODUCT = YES;
808819
};
@@ -868,7 +879,7 @@
868879
"$(inherited)",
869880
);
870881
INFOPLIST_FILE = "Messenger-Storyboard/Info.plist";
871-
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
882+
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
872883
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
873884
MTL_ENABLE_DEBUG_INFO = YES;
874885
PRODUCT_BUNDLE_IDENTIFIER = com.slack.Messenger;
@@ -888,7 +899,7 @@
888899
CODE_SIGN_IDENTITY = "iPhone Developer";
889900
ENABLE_STRICT_OBJC_MSGSEND = YES;
890901
INFOPLIST_FILE = "Messenger-Storyboard/Info.plist";
891-
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
902+
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
892903
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
893904
MTL_ENABLE_DEBUG_INFO = NO;
894905
PRODUCT_BUNDLE_IDENTIFIER = com.slack.Messenger;
@@ -912,7 +923,7 @@
912923
"$(inherited)",
913924
);
914925
INFOPLIST_FILE = "Messenger-Swift/Info.plist";
915-
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
926+
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
916927
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
917928
MTL_ENABLE_DEBUG_INFO = YES;
918929
PRODUCT_BUNDLE_IDENTIFIER = com.slack.Messenger;
@@ -935,7 +946,7 @@
935946
CODE_SIGN_IDENTITY = "iPhone Developer";
936947
ENABLE_STRICT_OBJC_MSGSEND = YES;
937948
INFOPLIST_FILE = "Messenger-Swift/Info.plist";
938-
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
949+
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
939950
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
940951
MTL_ENABLE_DEBUG_INFO = NO;
941952
PRODUCT_BUNDLE_IDENTIFIER = com.slack.Messenger;
@@ -958,7 +969,7 @@
958969
"$(inherited)",
959970
);
960971
INFOPLIST_FILE = "$(SRCROOT)/Messenger-iPad-Sheet/Info.plist";
961-
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
972+
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
962973
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
963974
MTL_ENABLE_DEBUG_INFO = YES;
964975
PRODUCT_BUNDLE_IDENTIFIER = com.slack.Messenger;
@@ -975,7 +986,7 @@
975986
CLANG_WARN_UNREACHABLE_CODE = YES;
976987
ENABLE_STRICT_OBJC_MSGSEND = YES;
977988
INFOPLIST_FILE = "$(SRCROOT)/Messenger-iPad-Sheet/Info.plist";
978-
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
989+
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
979990
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
980991
MTL_ENABLE_DEBUG_INFO = NO;
981992
PRODUCT_BUNDLE_IDENTIFIER = com.slack.Messenger;

0 commit comments

Comments
 (0)