Skip to content

Commit

Permalink
Update project to and fix compiler warnings for Xcode 9.3.
Browse files Browse the repository at this point in the history
  • Loading branch information
nolanw committed Apr 1, 2018
1 parent ebea23e commit 6f1f8d3
Show file tree
Hide file tree
Showing 36 changed files with 70 additions and 70 deletions.
2 changes: 1 addition & 1 deletion App/Composition/UploadImageAttachments.swift
Expand Up @@ -86,7 +86,7 @@ private func uploadImages(fromSources sources: [ImageTag.Source], completion: @e
if progress.isCancelled {
completion(nil, NSError(domain: NSCocoaErrorDomain, code: NSUserCancelledError, userInfo: nil))
} else {
completion(urls.flatMap { $0 }, nil)
completion(urls.compactMap { $0 }, nil)
}
}

Expand Down
2 changes: 1 addition & 1 deletion App/Data Sources/ForumListDataSource.swift
Expand Up @@ -319,7 +319,7 @@ extension ForumListDataSource: NSFetchedResultsControllerDelegate {
extension ForumListDataSource: UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return resultsControllers
.flatMap { $0.sections?.count }
.compactMap { $0.sections?.count }
.reduce(0, +)
}

Expand Down
2 changes: 1 addition & 1 deletion App/In-App Actions/InAppActionCollectionViewLayout.swift
Expand Up @@ -117,7 +117,7 @@ class InAppActionCollectionViewLayout: UICollectionViewLayout {
return allAttributes.filter { rect.intersects($0.frame) }
}

override func layoutAttributesForItem(at indexPath: IndexPath) -> (UICollectionViewLayoutAttributes!) {
override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? {
return allAttributes[(indexPath as NSIndexPath).item]
}

Expand Down
2 changes: 1 addition & 1 deletion App/Misc/SystemCapabilities.swift
Expand Up @@ -60,7 +60,7 @@ private func findModelIdentifier() throws -> String {

let bufferSize = Int(size) + 1
let buffer = UnsafeMutablePointer<CChar>.allocate(capacity: bufferSize)
defer { buffer.deallocate(capacity: bufferSize) }
defer { buffer.deallocate() }

guard sysctlbyname("hw.machine", buffer, &size, nil, 0) == 0 else {
throw ModelIdentifierError.failedToRetrieveModelIdentifier
Expand Down
2 changes: 1 addition & 1 deletion App/Posts/PostsViewExternalStylesheetLoader.swift
Expand Up @@ -52,7 +52,7 @@ final class PostsViewExternalStylesheetLoader: NSObject {
request.setCacheHeadersWithResponse(oldResponse)
}

session.downloadTask(with: request as URLRequest!, progress: nil, destination: { (targetPath, response) -> URL in
session.downloadTask(with: request, progress: nil, destination: { (targetPath, response) -> URL in
self.createCacheFolderIfNecessary()
return self.cachedStylesheetURL

Expand Down
2 changes: 1 addition & 1 deletion App/Posts/ReportPostViewController.swift
Expand Up @@ -96,7 +96,7 @@ final class ReportPostViewController: ViewController {
rootView.instructionLabel.textColor = theme["listTextColor"] as UIColor?
rootView.commentTextField.textColor = theme["listTextColor"] as UIColor?
rootView.commentTextField.attributedPlaceholder = NSAttributedString(string: "Optional comment", attributes: [
.foregroundColor: theme["placeholderTextColor"] as UIColor!])
.foregroundColor: theme["placeholderTextColor"] as UIColor? ?? .black])
}

override func viewWillAppear(_ animated: Bool) {
Expand Down
2 changes: 1 addition & 1 deletion App/Private Messages/MessageComposeViewController.swift
Expand Up @@ -93,7 +93,7 @@ final class MessageComposeViewController: ComposeTextViewController {
.then { [weak self] (threadTags) -> Void in
self?.availableThreadTags = threadTags

let imageNames = [ThreadTagLoader.emptyPrivateMessageImageName] + threadTags.flatMap { $0.imageName }
let imageNames = [ThreadTagLoader.emptyPrivateMessageImageName] + threadTags.compactMap { $0.imageName }
let picker = ThreadTagPickerViewController(imageNames: imageNames, secondaryImageNames: nil)
picker.delegate = self
picker.navigationItem.leftBarButtonItem = picker.cancelButtonItem
Expand Down
8 changes: 4 additions & 4 deletions App/Settings/AppIconPickerCell.swift
Expand Up @@ -67,7 +67,7 @@ final class AppIconPickerCell: UITableViewCell, UICollectionViewDataSource, UICo
let oldSelectedIndexPath = appIcons
.index { $0.iconName == previousSelection }
.map { IndexPath(item: $0, section: 0) }
let reloadIndexPaths = [indexPath, oldSelectedIndexPath].flatMap { $0 }
let reloadIndexPaths = [indexPath, oldSelectedIndexPath].compactMap { $0 }
collectionView.reloadItems(at: reloadIndexPaths)
}
}
Expand Down Expand Up @@ -117,9 +117,9 @@ private func findAppIcons() -> [AppIcon] {

let alternates = icons["CFBundleAlternateIcons"] as? [String: Any] ?? [:]
let alternateFilenames = alternates.values
.flatMap { (value: Any) -> [String: Any]? in value as? [String: Any] }
.flatMap { (dict: [String: Any]) -> [String]? in dict["CFBundleIconFiles"] as? [String] }
.flatMap { (files: [String]) -> String? in files.first(where: filenameContainsHandySize) }
.compactMap { (value: Any) -> [String: Any]? in value as? [String: Any] }
.compactMap { (dict: [String: Any]) -> [String]? in dict["CFBundleIconFiles"] as? [String] }
.compactMap { (files: [String]) -> String? in files.first(where: filenameContainsHandySize) }
.sorted { (lhs: String, rhs: String) -> Bool in lhs.caseInsensitiveCompare(rhs) == .orderedAscending }

var filenames = [primaryFilename]
Expand Down
4 changes: 2 additions & 2 deletions App/Thread Tags/ThreadTagLoader.swift
Expand Up @@ -230,7 +230,7 @@ final class ThreadTagLoader: NSObject {
guard let shippedThreadTagFolder = Bundle(for: ThreadTagLoader.self).resourceURL?.appendingPathComponent(resourceSubfolder, isDirectory: true) else { return placeholderImageNames }
do {
let URLs = try FileManager.default.contentsOfDirectory(at: shippedThreadTagFolder, includingPropertiesForKeys: nil, options: .skipsHiddenFiles)
return URLs.flatMap { $0.lastPathComponent } + placeholderImageNames
return URLs.compactMap { $0.lastPathComponent } + placeholderImageNames
} catch {
print("\(#function) error listing shipped thread tags: \(error)")
return placeholderImageNames
Expand All @@ -240,7 +240,7 @@ final class ThreadTagLoader: NSObject {
fileprivate var cachedThreadTagImageNames: [String] {
do {
let URLs = try FileManager.default.contentsOfDirectory(at: cacheFolder, includingPropertiesForKeys: nil, options: .skipsHiddenFiles)
return URLs.flatMap { $0.lastPathComponent }
return URLs.compactMap { $0.lastPathComponent }
} catch {
print("\(#function) error listing cached thread tags: \(error)")
return []
Expand Down
4 changes: 2 additions & 2 deletions App/Threads/ThreadComposeViewController.swift
Expand Up @@ -157,8 +157,8 @@ final class ThreadComposeViewController: ComposeTextViewController {
sself.availableSecondaryThreadTags = tags.secondary
guard let tags = sself.availableThreadTags else { return }

let imageNames = [ThreadTagLoader.emptyThreadTagImageName] + tags.flatMap { $0.imageName }
let secondaryImageNames = sself.availableSecondaryThreadTags?.flatMap { $0.imageName }
let imageNames = [ThreadTagLoader.emptyThreadTagImageName] + tags.compactMap { $0.imageName }
let secondaryImageNames = sself.availableSecondaryThreadTags?.compactMap { $0.imageName }
let picker = ThreadTagPickerViewController(imageNames: imageNames, secondaryImageNames: secondaryImageNames)
sself.threadTagPicker = picker
picker.delegate = sself
Expand Down
2 changes: 1 addition & 1 deletion App/URLs/AwfulURLRouter.swift
Expand Up @@ -187,7 +187,7 @@ final class AwfulURLRouter: NSObject {
*/
func route(_ url: URL) -> Bool {
guard url.scheme?.caseInsensitiveCompare("awful") == .orderedSame else { return false }
return routes.routeURL(url as URL!)
return routes.routeURL(url)
}

fileprivate func jumpToForum(_ forum: Forum) -> Bool {
Expand Down
2 changes: 1 addition & 1 deletion App/URLs/ResourceURLProtocol.swift
Expand Up @@ -34,7 +34,7 @@ final class ResourceURLProtocol: URLProtocol {
let possibleResourceURLs = resource
.pathsForScreenWithScale(UIScreen.main.scale)
.map { Bundle.main.url(forResource: $0, withExtension: nil) }
.flatMap { $0 }
.compactMap { $0 }

guard let resourceURL = possibleResourceURLs.first else {
print("Could not find resource for URL \(URL)")
Expand Down
2 changes: 1 addition & 1 deletion App/View Controllers/ThreadsTableViewController.swift
Expand Up @@ -329,7 +329,7 @@ final class ThreadsTableViewController: TableViewController, ComposeTextViewCont
// MARK: UIViewControllerRestoration

class func viewController(withRestorationIdentifierPath identifierComponents: [Any], coder: NSCoder) -> UIViewController? {
var forumKey = coder.decodeObject(forKey: RestorationKeys.forumKey) as! ForumKey!
var forumKey = coder.decodeObject(forKey: RestorationKeys.forumKey) as! ForumKey?
if forumKey == nil {
guard let forumID = coder.decodeObject(forKey: ObsoleteRestorationKeys.forumID) as? String else { return nil }
forumKey = ForumKey(forumID: forumID)
Expand Down
8 changes: 8 additions & 0 deletions Awful.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
6 changes: 3 additions & 3 deletions Core/Model/AwfulManagedObject.swift
Expand Up @@ -62,8 +62,8 @@ public class AwfulObjectKey: NSObject, NSCoding, NSCopying {
return false
}
for key in keys {
let otherValue = other.value(forKey: key) as! NSObject!
let value = self.value(forKey: key) as! NSObject!
let otherValue = other.value(forKey: key) as! NSObject?
let value = self.value(forKey: key) as! NSObject?
if otherValue != nil && value != nil && otherValue != value {
return false
}
Expand Down Expand Up @@ -141,7 +141,7 @@ extension AwfulManagedObject {
}

public class func objectForKey(objectKey: AwfulObjectKey, inManagedObjectContext context: NSManagedObjectContext) -> AnyObject {
var object = existingObjectForKey(objectKey: objectKey, inManagedObjectContext: context) as! AwfulManagedObject!
var object = existingObjectForKey(objectKey: objectKey, inManagedObjectContext: context) as! AwfulManagedObject?
if object == nil {
object = insertIntoManagedObjectContext(context: context)
}
Expand Down
20 changes: 10 additions & 10 deletions Core/Networking/ForumsClient.swift
Expand Up @@ -75,7 +75,7 @@ public final class ForumsClient {

context.perform {
updatedObjectIDs
.flatMap { context.object(with: $0) }
.compactMap { context.object(with: $0) }
.forEach { $0.willAccessValue(forKey: nil) }

context.mergeChanges(fromContextDidSave: notification)
Expand Down Expand Up @@ -194,7 +194,7 @@ public final class ForumsClient {
return forums.map { $0.objectID }
}
.then(on: mainContext) { objectIDs, context -> [Forum] in
return objectIDs.flatMap { context.object(with: $0) as? Forum }
return objectIDs.compactMap { context.object(with: $0) as? Forum }
}
}

Expand Down Expand Up @@ -237,7 +237,7 @@ public final class ForumsClient {
return threads.map { $0.objectID }
}
.then(on: mainContext) { objectIDs, context -> [AwfulThread] in
return objectIDs.flatMap { context.object(with: $0) as? AwfulThread }
return objectIDs.compactMap { context.object(with: $0) as? AwfulThread }
}
}

Expand Down Expand Up @@ -275,7 +275,7 @@ public final class ForumsClient {
return threads.map { $0.objectID }
}
.then(on: mainContext) { objectIDs, context -> [AwfulThread] in
return objectIDs.flatMap { context.object(with: $0) as? AwfulThread }
return objectIDs.compactMap { context.object(with: $0) as? AwfulThread }
}
}

Expand Down Expand Up @@ -359,8 +359,8 @@ public final class ForumsClient {
}
.then(on: mainContext) { objectIDs, context -> (primary: [ThreadTag], secondary: [ThreadTag]) in
return (
primary: objectIDs.primary.flatMap { context.object(with: $0) as? ThreadTag },
secondary: objectIDs.secondary.flatMap { context.object(with: $0) as? ThreadTag })
primary: objectIDs.primary.compactMap { context.object(with: $0) as? ThreadTag },
secondary: objectIDs.secondary.compactMap { context.object(with: $0) as? ThreadTag })
}
}

Expand Down Expand Up @@ -523,7 +523,7 @@ public final class ForumsClient {
return announcements.map { $0.objectID }
}
.then(on: mainContext) { objectIDs, context -> [Announcement] in
return objectIDs.flatMap { context.object(with: $0) as? Announcement }
return objectIDs.compactMap { context.object(with: $0) as? Announcement }
}

return (promise: result, cancellable: cancellable)
Expand Down Expand Up @@ -592,7 +592,7 @@ public final class ForumsClient {
return posts.map { $0.objectID }
}
.then(on: mainContext) { objectIDs, context -> [Post] in
return objectIDs.flatMap { context.object(with: $0) as? Post }
return objectIDs.compactMap { context.object(with: $0) as? Post }
}

let firstUnreadPostIndex = promise
Expand Down Expand Up @@ -1066,7 +1066,7 @@ public final class ForumsClient {
return messages.map { $0.objectID }
}
.then(on: mainContext) { (objectIDs, context) -> [PrivateMessage] in
return objectIDs.flatMap { context.object(with: $0) as? PrivateMessage }
return objectIDs.compactMap { context.object(with: $0) as? PrivateMessage }
}
}

Expand Down Expand Up @@ -1145,7 +1145,7 @@ public final class ForumsClient {
return managed.primary.map { $0.objectID }
}
.then(on: mainContext) { managedObjectIDs, context -> [ThreadTag] in
return managedObjectIDs.flatMap { context.object(with: $0) as? ThreadTag }
return managedObjectIDs.compactMap { context.object(with: $0) as? ThreadTag }
}
}

Expand Down
6 changes: 3 additions & 3 deletions Core/Persistence/AnnouncementPersistence.swift
Expand Up @@ -20,7 +20,7 @@ internal extension AnnouncementListScrapeResult {
do {
let request = NSFetchRequest<User>(entityName: User.entityName())
let usernames: [String] = self.announcements
.flatMap { (announcement: Announcement) -> String? in announcement.author?.username }
.compactMap { (announcement: Announcement) -> String? in announcement.author?.username }
.filter { (s: String) -> Bool in !s.isEmpty }
request.predicate = NSPredicate(format: "%K IN %@", #keyPath(User.username), usernames)
request.returnsObjectsAsFaults = false
Expand Down Expand Up @@ -84,7 +84,7 @@ internal extension ThreadListScrapeResult {
var threadTags: [String: ThreadTag] = [:]
do {
let request = NSFetchRequest<ThreadTag>(entityName: ThreadTag.entityName())
let imageNames = self.announcements.flatMap { $0.iconURL }.flatMap(ThreadTag.imageName)
let imageNames = self.announcements.compactMap { $0.iconURL }.flatMap(ThreadTag.imageName)
request.predicate = NSPredicate(format: "%K in %@", #keyPath(ThreadTag.imageName), imageNames)
request.returnsObjectsAsFaults = false

Expand All @@ -97,7 +97,7 @@ internal extension ThreadListScrapeResult {
var users: [UserID: User] = [:]
do {
let request = NSFetchRequest<User>(entityName: User.entityName())
let userIDs = self.announcements.flatMap { $0.author }.map { $0.rawValue }
let userIDs = self.announcements.compactMap { $0.author }.map { $0.rawValue }
request.predicate = NSPredicate(format: "%K in %@", #keyPath(User.userID), userIDs)
request.returnsObjectsAsFaults = false

Expand Down
2 changes: 1 addition & 1 deletion Core/Persistence/ForumPersistence.swift
Expand Up @@ -51,7 +51,7 @@ internal extension ForumBreadcrumbsScrapeResult {
unorderedForums[rawForum.id] = forum
}

let forums = rawForums.flatMap { (raw) -> Forum? in
let forums = rawForums.compactMap { (raw) -> Forum? in
let forum = unorderedForums[raw.id]
if let forum = forum { raw.update(forum) }
return forum
Expand Down
2 changes: 1 addition & 1 deletion Core/Persistence/PostIconPersistence.swift
Expand Up @@ -40,7 +40,7 @@ internal class PostIconPersistenceHelper {
.map { $0.id }
.filter { !$0.isEmpty }
let imageNames = icons
.flatMap { $0.url }
.compactMap { $0.url }
.map(ThreadTag.imageName)
.filter { !$0.isEmpty }
request.predicate = NSCompoundPredicate(orPredicateWithSubpredicates: [
Expand Down
2 changes: 1 addition & 1 deletion Core/Persistence/PrivateMessagePersistence.swift
Expand Up @@ -23,7 +23,7 @@ internal extension PrivateMessageFolderScrapeResult {
do {
let request = NSFetchRequest<ThreadTag>(entityName: ThreadTag.entityName())
let imageNames = self.messages
.flatMap { $0.iconImage }
.compactMap { $0.iconImage }
.map { $0.deletingPathExtension().lastPathComponent }
request.predicate = NSPredicate(format: "%K IN %@", #keyPath(ThreadTag.imageName), imageNames)
request.returnsObjectsAsFaults = false
Expand Down
6 changes: 3 additions & 3 deletions Core/Persistence/ThreadPersistence.swift
Expand Up @@ -9,8 +9,8 @@ internal extension ThreadListScrapeResult {
let (group: _, forums: forums) = try breadcrumbs?.upsert(into: context) ?? (nil, [])
let forum = forums.last

let icons = self.threads.flatMap { $0.icon }
+ self.threads.flatMap { $0.secondaryIcon }
let icons = self.threads.compactMap { $0.icon }
+ self.threads.compactMap { $0.secondaryIcon }
+ self.filterableIcons
let iconHelper = PostIconPersistenceHelper(context: context, icons: icons)
try iconHelper.performFetch()
Expand All @@ -22,7 +22,7 @@ internal extension ThreadListScrapeResult {
var users: [UserID: User] = [:]
do {
let request = NSFetchRequest<User>(entityName: User.entityName())
let userIDs = self.threads.flatMap { $0.author?.rawValue }
let userIDs = self.threads.compactMap { $0.author?.rawValue }
request.predicate = NSPredicate(format: "%K IN %@", #keyPath(User.userID), userIDs)
request.returnsObjectsAsFaults = false

Expand Down
2 changes: 1 addition & 1 deletion Core/Scraping/Form.swift
Expand Up @@ -325,7 +325,7 @@ private func scrapeSubmissionStringEncoding(document: HTMLDocument?, form: HTMLE
.components(separatedBy: asciiWhitespace)
.map(StringEncodingForLabel)
.filter { $0 != InvalidStringEncoding() }
.flatMap(String.Encoding.init)
.compactMap(String.Encoding.init)
.first
}

Expand Down
2 changes: 1 addition & 1 deletion Core/Scraping/ForumHierarchyScrapeResult.swift
Expand Up @@ -11,7 +11,7 @@ public struct ForumHierarchyScrapeResult: ScrapeResult {
let select = try html.requiredNode(matchingSelector: "select[name = 'forumid']")
nodes = try select
.nodes(matchingSelector: "option[value]")
.flatMap(ForumHierarchyNode.init)
.compactMap(ForumHierarchyNode.init)
}
}

Expand Down
2 changes: 1 addition & 1 deletion Core/Scraping/LepersColonyScrapeResult.swift
Expand Up @@ -63,7 +63,7 @@ public struct LepersColonyScrapeResult: ScrapeResult {

public init(_ html: HTMLNode, url: URL?) throws {
let table = try html.requiredNode(matchingSelector: "table.standard")
punishments = table.nodes(matchingSelector: "tr").flatMap { try? Punishment($0) }
punishments = table.nodes(matchingSelector: "tr").compactMap { try? Punishment($0) }
}
}

Expand Down
4 changes: 2 additions & 2 deletions Core/Scraping/PostIconListScrapeResult.swift
Expand Up @@ -17,7 +17,7 @@ public struct PostIconListScrapeResult: ScrapeResult {
throw ScrapingError.missingExpectedElement("div.posticon")
}

primaryIcons = primaryDivs.flatMap { try? PostIcon(div: $0) }
primaryIcons = primaryDivs.compactMap { try? PostIcon(div: $0) }

selectedPrimaryIconFormName = try primaryDivs.first!
.requiredNode(matchingSelector: "input[name]")["name"]!
Expand All @@ -30,7 +30,7 @@ public struct PostIconListScrapeResult: ScrapeResult {
return
}

secondaryIcons = zip(secondaryInputs, secondaryImages).flatMap {
secondaryIcons = zip(secondaryInputs, secondaryImages).compactMap {
try? PostIcon(input: $0, image: $1)
}

Expand Down
4 changes: 2 additions & 2 deletions Core/Scraping/PrivateMessageFolderScrapeResult.swift
Expand Up @@ -33,7 +33,7 @@ public struct PrivateMessageFolderScrapeResult: ScrapeResult {

allFolders = folderDropdown?
.nodes(matchingSelector: "option[value]")
.flatMap { try? Folder($0) }
.compactMap { try? Folder($0) }
?? []

folder = folderDropdown
Expand All @@ -47,7 +47,7 @@ public struct PrivateMessageFolderScrapeResult: ScrapeResult {

messages = try html.requiredNode(matchingSelector: "table.standard")
.nodes(matchingSelector: "tbody tr")
.flatMap { try? Message($0) }
.compactMap { try? Message($0) }
}
}

Expand Down

0 comments on commit 6f1f8d3

Please sign in to comment.