Skip to content

Commit d53b5ac

Browse files
committed
Swift 4
1 parent 7447217 commit d53b5ac

20 files changed

+89
-74
lines changed

CollectionView.xcodeproj/project.pbxproj

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -209,12 +209,12 @@
209209
isa = PBXProject;
210210
attributes = {
211211
LastSwiftUpdateCheck = 0730;
212-
LastUpgradeCheck = 0820;
212+
LastUpgradeCheck = 0900;
213213
ORGANIZATIONNAME = "Noun Project";
214214
TargetAttributes = {
215215
DE9071E81CAC7FD800AD0E37 = {
216216
CreatedOnToolsVersion = 7.2.1;
217-
LastSwiftMigration = 0800;
217+
LastSwiftMigration = 0900;
218218
};
219219
};
220220
};
@@ -294,14 +294,20 @@
294294
CLANG_CXX_LIBRARY = "libc++";
295295
CLANG_ENABLE_MODULES = YES;
296296
CLANG_ENABLE_OBJC_ARC = YES;
297+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
297298
CLANG_WARN_BOOL_CONVERSION = YES;
299+
CLANG_WARN_COMMA = YES;
298300
CLANG_WARN_CONSTANT_CONVERSION = YES;
299301
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
300302
CLANG_WARN_EMPTY_BODY = YES;
301303
CLANG_WARN_ENUM_CONVERSION = YES;
302304
CLANG_WARN_INFINITE_RECURSION = YES;
303305
CLANG_WARN_INT_CONVERSION = YES;
306+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
307+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
304308
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
309+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
310+
CLANG_WARN_STRICT_PROTOTYPES = YES;
305311
CLANG_WARN_SUSPICIOUS_MOVE = YES;
306312
CLANG_WARN_UNREACHABLE_CODE = YES;
307313
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
@@ -343,14 +349,20 @@
343349
CLANG_CXX_LIBRARY = "libc++";
344350
CLANG_ENABLE_MODULES = YES;
345351
CLANG_ENABLE_OBJC_ARC = YES;
352+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
346353
CLANG_WARN_BOOL_CONVERSION = YES;
354+
CLANG_WARN_COMMA = YES;
347355
CLANG_WARN_CONSTANT_CONVERSION = YES;
348356
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
349357
CLANG_WARN_EMPTY_BODY = YES;
350358
CLANG_WARN_ENUM_CONVERSION = YES;
351359
CLANG_WARN_INFINITE_RECURSION = YES;
352360
CLANG_WARN_INT_CONVERSION = YES;
361+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
362+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
353363
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
364+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
365+
CLANG_WARN_STRICT_PROTOTYPES = YES;
354366
CLANG_WARN_SUSPICIOUS_MOVE = YES;
355367
CLANG_WARN_UNREACHABLE_CODE = YES;
356368
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
@@ -398,7 +410,8 @@
398410
PRODUCT_NAME = "$(TARGET_NAME)";
399411
SKIP_INSTALL = YES;
400412
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
401-
SWIFT_VERSION = 3.0;
413+
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
414+
SWIFT_VERSION = 4.0;
402415
};
403416
name = Debug;
404417
};
@@ -422,7 +435,8 @@
422435
PRODUCT_NAME = "$(TARGET_NAME)";
423436
SKIP_INSTALL = YES;
424437
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
425-
SWIFT_VERSION = 3.0;
438+
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
439+
SWIFT_VERSION = 4.0;
426440
};
427441
name = Release;
428442
};

CollectionView/ChangeSet.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ public struct Edit<T: Hashable> : CustomStringConvertible, Hashable {
7676
switch self.operation {
7777
case let .move(origin):
7878
return "Edit: Move \(origin) to \(self.index)"
79-
case let .substitution(target):
80-
return "Edit: Replace item at \(self.index) - Target: \(target)"
79+
case .substitution:
80+
return "Edit: Replace item at \(self.index)"
8181
case .insertion:
8282
return "Edit: Insert at \(self.index)"
8383
case .deletion:
@@ -702,7 +702,7 @@ public struct ChangeSet<T: Collection> where T.Iterator.Element: Hashable, T.Ind
702702
- parameter edits: An array of `Edit` elements to be reduced.
703703
- returns: An array of `Edit` elements.
704704
*/
705-
private static func reducedEdits<T: Equatable>(_ edits: [Edit<T>]) -> [Edit<T>] {
705+
private static func reducedEdits<T>(_ edits: [Edit<T>]) -> [Edit<T>] {
706706
return edits.reduce([Edit<T>]()) { (edits, edit) in
707707
var reducedEdits = edits
708708
if let (move, index) = move(from: edit, in: reducedEdits), case let .move(origin) = move.operation {
@@ -735,7 +735,7 @@ public struct ChangeSet<T: Collection> where T.Iterator.Element: Hashable, T.Ind
735735

736736
- returns: An optional tuple consisting of the `.move` `Edit` that corresponds to the given deletion or insertion and an opposite match in `edits`, and the index of the match – if one was found.
737737
*/
738-
private func move<T: Equatable>(from deletionOrInsertion: Edit<T>, `in` edits: [Edit<T>]) -> (move: Edit<T>, index: Int)? {
738+
private func move<T>(from deletionOrInsertion: Edit<T>, `in` edits: [Edit<T>]) -> (move: Edit<T>, index: Int)? {
739739

740740
switch deletionOrInsertion.operation {
741741

CollectionView/ClipView.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,11 @@ open class ClipView : NSClipView {
6565

6666
override open func viewWillMove(toWindow newWindow: NSWindow?) {
6767
if (self.window != nil) {
68-
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.NSWindowDidChangeScreen, object: self.window)
68+
NotificationCenter.default.removeObserver(self, name: NSWindow.didChangeScreenNotification, object: self.window)
6969
}
7070
super.viewWillMove(toWindow: newWindow)
7171
if (newWindow != nil) {
72-
NotificationCenter.default.addObserver(self, selector: #selector(ClipView.updateCVDisplay(_:)), name: NSNotification.Name.NSWindowDidChangeScreen, object: newWindow)
72+
NotificationCenter.default.addObserver(self, selector: #selector(ClipView.updateCVDisplay(_:)), name: NSWindow.didChangeScreenNotification, object: newWindow)
7373
}
7474
}
7575

@@ -92,13 +92,13 @@ open class ClipView : NSClipView {
9292

9393

9494

95-
func updateCVDisplay(_ note: Notification) {
95+
@objc func updateCVDisplay(_ note: Notification) {
9696

9797
guard self._displayLink != nil else { return }
9898

9999
if let screen = self.window?.screen {
100100
let screenDictionary = screen.deviceDescription
101-
let screenID = screenDictionary["NSScreenNumber"] as! NSNumber
101+
let screenID = screenDictionary[NSDeviceDescriptionKey("NSScreenNumber")] as! NSNumber
102102
let displayID = screenID.uint32Value
103103
CVDisplayLinkSetCurrentCGDisplay(displayLink, displayID)
104104
}
@@ -189,7 +189,7 @@ open class ClipView : NSClipView {
189189
// }
190190
// Make this call so that we can force an update of the scroller positions.
191191
self.scrollView?.reflectScrolledClipView(self)
192-
NotificationCenter.default.post(name: Notification.Name.NSScrollViewDidLiveScroll, object: self.scrollView)
192+
NotificationCenter.default.post(name: NSScrollView.didLiveScrollNotification, object: self.scrollView)
193193
}
194194

195195
//.postNotificationName(NSScrollViewDidLiveScrollNotification, object: self, userInfo: nil)

CollectionView/CollectionView.swift

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ open class CollectionView : ScrollView, NSDraggingSource {
4141

4242

4343
/// The object that acts as the delegate to the collection view
44-
public weak var delegate : CollectionViewDelegate?
44+
@objc public weak var delegate : CollectionViewDelegate?
4545

4646
/// The object that provides data for the collection view
4747
public weak var dataSource : CollectionViewDataSource?
@@ -84,9 +84,9 @@ open class CollectionView : ScrollView, NSDraggingSource {
8484
self.hasVerticalScroller = true
8585
self.scrollsDynamically = true
8686

87-
NotificationCenter.default.addObserver(self, selector: #selector(CollectionView.didScroll(_:)), name: NSNotification.Name.NSScrollViewDidLiveScroll, object: self)
88-
NotificationCenter.default.addObserver(self, selector: #selector(CollectionView.willBeginScroll(_:)), name: NSNotification.Name.NSScrollViewWillStartLiveScroll, object: self)
89-
NotificationCenter.default.addObserver(self, selector: #selector(CollectionView.didEndScroll(_:)), name: NSNotification.Name.NSScrollViewDidEndLiveScroll, object: self)
87+
NotificationCenter.default.addObserver(self, selector: #selector(CollectionView.didScroll(_:)), name: NSScrollView.didLiveScrollNotification, object: self)
88+
NotificationCenter.default.addObserver(self, selector: #selector(CollectionView.willBeginScroll(_:)), name: NSScrollView.willStartLiveScrollNotification, object: self)
89+
NotificationCenter.default.addObserver(self, selector: #selector(CollectionView.didEndScroll(_:)), name: NSScrollView.didEndLiveScrollNotification, object: self)
9090

9191
self.addSubview(_floatingSupplementaryView, positioned: .above, relativeTo: self.clipView!)
9292
self._floatingSupplementaryView.wantsLayer = true
@@ -114,7 +114,7 @@ open class CollectionView : ScrollView, NSDraggingSource {
114114
}
115115
}
116116

117-
open override var scrollerStyle: NSScrollerStyle {
117+
open override var scrollerStyle: NSScroller.Style {
118118
didSet {
119119
// log.debug("Scroller Style changed")
120120
self.reloadLayout(false)
@@ -211,9 +211,10 @@ open class CollectionView : ScrollView, NSDraggingSource {
211211
internal var _registeredSupplementaryViewKinds = Set<String>()
212212
private func _firstObjectOfClass(_ aClass: AnyClass, inNib: NSNib) -> NSView? {
213213
var foundObject: AnyObject? = nil
214-
var topLevelObjects = NSArray()
215-
if inNib.instantiate(withOwner: self, topLevelObjects: &topLevelObjects) {
216-
for obj in topLevelObjects {
214+
var topLevelObjects : NSArray?
215+
216+
if inNib.instantiate(withOwner: self, topLevelObjects: &topLevelObjects), let objects = topLevelObjects {
217+
for obj in objects {
217218
if let o = obj as? NSView, o.isKind(of: aClass) {
218219
foundObject = o
219220
break
@@ -727,7 +728,7 @@ open class CollectionView : ScrollView, NSDraggingSource {
727728

728729
// MARK: - Scroll Handling
729730
/*-------------------------------------------------------------------------------*/
730-
override open class func isCompatibleWithResponsiveScrolling() -> Bool { return true }
731+
override open class var isCompatibleWithResponsiveScrolling: Bool { return true }
731732

732733
public var isScrollEnabled : Bool {
733734
set { self.clipView?.scrollEnabled = newValue }
@@ -786,7 +787,7 @@ open class CollectionView : ScrollView, NSDraggingSource {
786787
public private(set) var peakScrollVelocity = CGPoint.zero
787788

788789

789-
final func didScroll(_ notification: Notification) {
790+
@objc final func didScroll(_ notification: Notification) {
790791
let rect = _preperationRect
791792
self.contentDocumentView.prepareRect(rect)
792793

@@ -802,22 +803,22 @@ open class CollectionView : ScrollView, NSDraggingSource {
802803
self.delegate?.collectionViewDidScroll?(self)
803804
}
804805

805-
final func willBeginScroll(_ notification: Notification) {
806+
@objc final func willBeginScroll(_ notification: Notification) {
806807
self.isScrolling = true
807808
self.delegate?.collectionViewWillBeginScrolling?(self)
808809
self._previousOffset = self.contentVisibleRect.origin
809810
self.peakScrollVelocity = CGPoint.zero
810811
self.scrollVelocity = CGPoint.zero
811812
}
812813

813-
final func didEndScroll(_ notification: Notification) {
814+
@objc final func didEndScroll(_ notification: Notification) {
814815
self.isScrolling = false
815816

816817
self.delegate?.collectionViewDidEndScrolling?(self, animated: true)
817818
self.scrollVelocity = CGPoint.zero
818819
self.peakScrollVelocity = CGPoint.zero
819820

820-
if trackSectionHover && NSApp.isActive, let point = self.window?.convertFromScreen(NSRect(origin: NSEvent.mouseLocation(), size: CGSize.zero)).origin {
821+
if trackSectionHover && NSApp.isActive, let point = self.window?.convertFromScreen(NSRect(origin: NSEvent.mouseLocation, size: CGSize.zero)).origin {
821822
let loc = self.contentDocumentView.convert(point, from: nil)
822823
self.delegate?.collectionView?(self, mouseMovedToSection: indexPathForSection(at: loc))
823824
}
@@ -1530,7 +1531,7 @@ open class CollectionView : ScrollView, NSDraggingSource {
15301531
self.removeTrackingArea(ta)
15311532
}
15321533
if trackSectionHover {
1533-
_trackingArea = NSTrackingArea(rect: self.bounds, options: [NSTrackingAreaOptions.activeInActiveApp, NSTrackingAreaOptions.mouseEnteredAndExited, NSTrackingAreaOptions.mouseMoved], owner: self, userInfo: nil)
1534+
_trackingArea = NSTrackingArea(rect: self.bounds, options: [NSTrackingArea.Options.activeInActiveApp, NSTrackingArea.Options.mouseEnteredAndExited, NSTrackingArea.Options.mouseMoved], owner: self, userInfo: nil)
15341535
self.addTrackingArea(_trackingArea!)
15351536
}
15361537
}
@@ -1621,7 +1622,7 @@ open class CollectionView : ScrollView, NSDraggingSource {
16211622
self._deselectAllItems(true, notify: true)
16221623
}
16231624

1624-
if theEvent.modifierFlags.contains(NSEventModifierFlags.control) {
1625+
if theEvent.modifierFlags.contains(NSEvent.ModifierFlags.control) {
16251626
self.rightMouseDown(with: theEvent)
16261627
return
16271628
}
@@ -1635,10 +1636,10 @@ open class CollectionView : ScrollView, NSDraggingSource {
16351636

16361637
guard ip == mouseDownIP else { return }
16371638

1638-
if allowsMultipleSelection && theEvent.modifierFlags.contains(NSEventModifierFlags.shift) {
1639+
if allowsMultipleSelection && theEvent.modifierFlags.contains(NSEvent.ModifierFlags.shift) {
16391640
self._selectItem(at: ip, atScrollPosition: .nearest, animated: true, selectionType: .extending)
16401641
}
1641-
else if allowsMultipleSelection && theEvent.modifierFlags.contains(NSEventModifierFlags.command) {
1642+
else if allowsMultipleSelection && theEvent.modifierFlags.contains(NSEvent.ModifierFlags.command) {
16421643
if self._selectedIndexPaths.contains(ip) {
16431644
if self._selectedIndexPaths.count == 1 { return }
16441645
self._deselectItem(at: ip, animated: true, notifyDelegate: true)
@@ -1701,7 +1702,7 @@ open class CollectionView : ScrollView, NSDraggingSource {
17011702
else {
17021703
lastEventTime = nil
17031704
}
1704-
let extend = selectionMode == .multi || theEvent.modifierFlags.contains(NSEventModifierFlags.shift)
1705+
let extend = selectionMode == .multi || theEvent.modifierFlags.contains(NSEvent.ModifierFlags.shift)
17051706
if theEvent.keyCode == 123 { self.moveSelectionLeft(extend) }
17061707
else if theEvent.keyCode == 124 { self.moveSelectionRight(extend) }
17071708
else if theEvent.keyCode == 125 { self.moveSelectionDown(extend) }
@@ -2562,7 +2563,7 @@ open class CollectionView : ScrollView, NSDraggingSource {
25622563

25632564
// image = NSImage(data: cell.dataWithPDF(inside: cell.bounds))
25642565
}
2565-
let comp = NSDraggingImageComponent(key: NSDraggingImageComponentIconKey)
2566+
let comp = NSDraggingImageComponent(key: NSDraggingItem.ImageComponentKey.icon)
25662567
comp.contents = image
25672568
comp.frame = CGRect(origin: CGPoint.zero, size: frame.size)
25682569
return [comp]
@@ -2623,7 +2624,7 @@ open class CollectionView : ScrollView, NSDraggingSource {
26232624
invalidateAutoscroll()
26242625
self.interactionDelegate?.collectionView?(self, dragExited: sender)
26252626
}
2626-
open override func draggingEnded(_ sender: NSDraggingInfo?) {
2627+
open override func draggingEnded(_ sender: NSDraggingInfo) {
26272628
self.interactionDelegate?.collectionView?(self, dragEnded: sender)
26282629
}
26292630
open override func draggingUpdated(_ sender: NSDraggingInfo) -> NSDragOperation {
@@ -2651,7 +2652,7 @@ open class CollectionView : ScrollView, NSDraggingSource {
26512652
autoscrollTimer = nil
26522653
}
26532654

2654-
func autoscrollTimer(_ sender: Timer) {
2655+
@objc func autoscrollTimer(_ sender: Timer) {
26552656
if let p = (sender.userInfo as? [String:Any])?["point"] as? CGPoint {
26562657
autoScroll(to: p)
26572658
}

CollectionView/CollectionViewCells.swift

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ open class CollectionReusableView : NSView {
2020
override public init(frame frameRect: NSRect) {
2121
super.init(frame: frameRect)
2222
self.wantsLayer = true
23-
self.layerContentsRedrawPolicy = NSViewLayerContentsRedrawPolicy.onSetNeedsDisplay
23+
self.layerContentsRedrawPolicy = NSView.LayerContentsRedrawPolicy.onSetNeedsDisplay
2424
}
2525
required public init?(coder: NSCoder) {
2626
super.init(coder: coder)
2727
self.wantsLayer = true
28-
self.layerContentsRedrawPolicy = NSViewLayerContentsRedrawPolicy.onSetNeedsDisplay
28+
self.layerContentsRedrawPolicy = NSView.LayerContentsRedrawPolicy.onSetNeedsDisplay
2929
}
3030

3131

@@ -114,7 +114,7 @@ open class CollectionReusableView : NSView {
114114
if let c = self.backgroundColor {
115115
NSGraphicsContext.saveGraphicsState()
116116
c.setFill()
117-
NSRectFill(dirtyRect)
117+
dirtyRect.fill()
118118
NSGraphicsContext.restoreGraphicsState()
119119
}
120120
super.draw(dirtyRect)
@@ -126,14 +126,14 @@ open class CollectionReusableView : NSView {
126126
/*-------------------------------------------------------------------------------*/
127127

128128
fileprivate var wantsTracking = false
129-
open var trackingOptions = [NSTrackingAreaOptions.mouseEnteredAndExited, NSTrackingAreaOptions.activeInKeyWindow, .inVisibleRect, .enabledDuringMouseDrag]
129+
open var trackingOptions = [NSTrackingArea.Options.mouseEnteredAndExited, NSTrackingArea.Options.activeInKeyWindow, NSTrackingArea.Options.inVisibleRect, NSTrackingArea.Options.enabledDuringMouseDrag]
130130
var _trackingArea : NSTrackingArea?
131131
open var trackMouseMoved : Bool = false {
132132
didSet {
133133
if trackMouseMoved == oldValue { return }
134-
let idx = trackingOptions.index(of: .mouseMoved)
134+
let idx = trackingOptions.index(of: NSTrackingArea.Options.mouseMoved)
135135
if trackMouseMoved && idx == nil {
136-
trackingOptions.append(.mouseMoved)
136+
trackingOptions.append(NSTrackingArea.Options.mouseMoved)
137137
}
138138
else if !trackMouseMoved, let i = idx {
139139
trackingOptions.remove(at: i)
@@ -159,7 +159,7 @@ open class CollectionReusableView : NSView {
159159
super.updateTrackingAreas()
160160
if let ta = self._trackingArea { self.removeTrackingArea(ta) }
161161
if self.wantsTracking == false { return }
162-
_trackingArea = NSTrackingArea(rect: self.bounds, options: NSTrackingAreaOptions(trackingOptions), owner: self, userInfo: nil)
162+
_trackingArea = NSTrackingArea(rect: self.bounds, options: NSTrackingArea.Options(trackingOptions), owner: self, userInfo: nil)
163163
self.addTrackingArea(_trackingArea!)
164164
}
165165

@@ -233,13 +233,13 @@ open class CollectionViewCell : CollectionReusableView {
233233

234234
// Validate self and the event
235235
guard let cv = self.collectionView, let ip = self.attributes?.indexPath else { return }
236-
guard theEvent.type == NSEventType.mouseEntered && (theEvent.trackingArea?.owner as? CollectionViewCell) == self else { return }
236+
guard theEvent.type == NSEvent.EventType.mouseEntered && (theEvent.trackingArea?.owner as? CollectionViewCell) == self else { return }
237237

238238
// Make sure the event is inside self
239239

240240
guard self.highlighted == false else { return }
241241
guard let window = self.window else { return }
242-
let mLoc = window.convertFromScreen(NSRect(origin: NSEvent.mouseLocation(), size: CGSize.zero)).origin
242+
let mLoc = window.convertFromScreen(NSRect(origin: NSEvent.mouseLocation, size: CGSize.zero)).origin
243243
if !self.bounds.contains(self.convert(mLoc, from: nil)) { return }
244244

245245
// Ignore the event if an interaction enabled view is over this cell
@@ -254,7 +254,7 @@ open class CollectionViewCell : CollectionReusableView {
254254
override open func mouseExited(with theEvent: NSEvent) {
255255
super.mouseExited(with: theEvent)
256256
guard self.highlighted == true else { return }
257-
guard theEvent.type == NSEventType.mouseExited && (theEvent.trackingArea?.owner as? CollectionViewCell) == self else { return }
257+
guard theEvent.type == NSEvent.EventType.mouseExited && (theEvent.trackingArea?.owner as? CollectionViewCell) == self else { return }
258258
self.setHighlighted(false, animated: true)
259259
}
260260

0 commit comments

Comments
 (0)