From a47c30fa8b4c6bebfaed5a08c7d1a537c170d298 Mon Sep 17 00:00:00 2001 From: Torsten Kammer <2102135+cochrane@users.noreply.github.com> Date: Tue, 7 May 2024 00:05:58 +0200 Subject: [PATCH] Swiftify GLLItemOptionalMarker Figured out how to do hash and isEqual in NSObject subclasses in Swift (turns out: Exactly like in Objective-C). --- GLLara.xcodeproj/project.pbxproj | 10 +++----- GLLara/GLLDocumentWindowController.m | 1 - GLLara/GLLItemOptionalPartMarker.h | 25 ------------------ GLLara/GLLItemOptionalPartMarker.m | 35 -------------------------- GLLara/GLLItemOptionalPartMarker.swift | 35 ++++++++++++++++++++++++++ GLLara/GLLOptionalPartController.m | 2 +- 6 files changed, 40 insertions(+), 68 deletions(-) delete mode 100644 GLLara/GLLItemOptionalPartMarker.h delete mode 100644 GLLara/GLLItemOptionalPartMarker.m create mode 100644 GLLara/GLLItemOptionalPartMarker.swift diff --git a/GLLara.xcodeproj/project.pbxproj b/GLLara.xcodeproj/project.pbxproj index 955e650..7849c65 100644 --- a/GLLara.xcodeproj/project.pbxproj +++ b/GLLara.xcodeproj/project.pbxproj @@ -42,7 +42,7 @@ 522783B01C0B7FC0002E43FD /* GLLRenderParameterSelectionPlaceholder.m in Sources */ = {isa = PBXBuildFile; fileRef = 522783AF1C0B7FBF002E43FD /* GLLRenderParameterSelectionPlaceholder.m */; }; 522783B31C0B91EF002E43FD /* GLLItemMeshSelectionPlaceholder.m in Sources */ = {isa = PBXBuildFile; fileRef = 522783B21C0B91EF002E43FD /* GLLItemMeshSelectionPlaceholder.m */; }; 52301E2D2087D91600B3E331 /* GLLOptionalPartController.m in Sources */ = {isa = PBXBuildFile; fileRef = 52301E2C2087D91600B3E331 /* GLLOptionalPartController.m */; }; - 52301E302087E36100B3E331 /* GLLItemOptionalPartMarker.m in Sources */ = {isa = PBXBuildFile; fileRef = 52301E2F2087E36100B3E331 /* GLLItemOptionalPartMarker.m */; }; + 52301E302087E36100B3E331 /* GLLItemOptionalPartMarker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52301E2F2087E36100B3E331 /* GLLItemOptionalPartMarker.swift */; }; 52301E322087E6FC00B3E331 /* GLLOptionalPartView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 52301E312087E6FC00B3E331 /* GLLOptionalPartView.xib */; }; 52301E352087E71400B3E331 /* GLLOptionalPartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52301E342087E71400B3E331 /* GLLOptionalPartViewController.swift */; }; 52301E382089372200B3E331 /* GLLOptionalPart.m in Sources */ = {isa = PBXBuildFile; fileRef = 52301E372089372200B3E331 /* GLLOptionalPart.m */; }; @@ -462,8 +462,7 @@ 522783B21C0B91EF002E43FD /* GLLItemMeshSelectionPlaceholder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GLLItemMeshSelectionPlaceholder.m; sourceTree = ""; }; 52301E2B2087D91600B3E331 /* GLLOptionalPartController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GLLOptionalPartController.h; sourceTree = ""; }; 52301E2C2087D91600B3E331 /* GLLOptionalPartController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GLLOptionalPartController.m; sourceTree = ""; }; - 52301E2E2087E36100B3E331 /* GLLItemOptionalPartMarker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GLLItemOptionalPartMarker.h; sourceTree = ""; }; - 52301E2F2087E36100B3E331 /* GLLItemOptionalPartMarker.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GLLItemOptionalPartMarker.m; sourceTree = ""; }; + 52301E2F2087E36100B3E331 /* GLLItemOptionalPartMarker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GLLItemOptionalPartMarker.swift; sourceTree = ""; }; 52301E312087E6FC00B3E331 /* GLLOptionalPartView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GLLOptionalPartView.xib; sourceTree = ""; }; 52301E342087E71400B3E331 /* GLLOptionalPartViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GLLOptionalPartViewController.swift; sourceTree = ""; }; 52301E362089372200B3E331 /* GLLOptionalPart.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GLLOptionalPart.h; sourceTree = ""; }; @@ -1000,8 +999,7 @@ 523D368016BEB29F004FAD4B /* GLLSubItemController.m */, 52301E2B2087D91600B3E331 /* GLLOptionalPartController.h */, 52301E2C2087D91600B3E331 /* GLLOptionalPartController.m */, - 52301E2E2087E36100B3E331 /* GLLItemOptionalPartMarker.h */, - 52301E2F2087E36100B3E331 /* GLLItemOptionalPartMarker.m */, + 52301E2F2087E36100B3E331 /* GLLItemOptionalPartMarker.swift */, ); name = "Source List"; sourceTree = ""; @@ -1842,7 +1840,7 @@ files = ( 525ACD5815F0F1A700534E7D /* main.m in Sources */, 527270AA2BE8187100EE52B5 /* GLLAmbientLight.swift in Sources */, - 52301E302087E36100B3E331 /* GLLItemOptionalPartMarker.m in Sources */, + 52301E302087E36100B3E331 /* GLLItemOptionalPartMarker.swift in Sources */, 5274446827FD6F7F00E5A3FD /* GLLVertexAttribAccessorSet.swift in Sources */, 525ACD5F15F0F1A700534E7D /* GLLDocument.m in Sources */, 52FB1FD82879846A006ABC4F /* DepthBufferCheck.metal in Sources */, diff --git a/GLLara/GLLDocumentWindowController.m b/GLLara/GLLDocumentWindowController.m index c8e5304..04f0507 100644 --- a/GLLara/GLLDocumentWindowController.m +++ b/GLLara/GLLDocumentWindowController.m @@ -18,7 +18,6 @@ #import "GLLItemController.h" #import "GLLItemListController.h" #import "GLLItemMesh.h" -#import "GLLItemOptionalPartMarker.h" #import "GLLItemViewController.h" #import "GLLLightsListController.h" #import "GLLMeshViewController.h" diff --git a/GLLara/GLLItemOptionalPartMarker.h b/GLLara/GLLItemOptionalPartMarker.h deleted file mode 100644 index 2b4a476..0000000 --- a/GLLara/GLLItemOptionalPartMarker.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// GLLItemOptionalPartMarker.h -// GLLara -// -// Created by Torsten Kammer on 18.04.18. -// Copyright © 2018 Torsten Kammer. All rights reserved. -// - -#import - -@class GLLItem; - -/*! - * A simple object that only contains a GLLItem; used for selection to mark that - * the "optional parts" section was selected. - * - * Equality and hash code: Two of these are equal - and have equal hash codes - - * if the underlying items are. - */ -@interface GLLItemOptionalPartMarker : NSObject - -- (id)initWithItem:(GLLItem *)item; -@property (nonatomic, readonly) GLLItem *item; - -@end diff --git a/GLLara/GLLItemOptionalPartMarker.m b/GLLara/GLLItemOptionalPartMarker.m deleted file mode 100644 index 3f1a8d7..0000000 --- a/GLLara/GLLItemOptionalPartMarker.m +++ /dev/null @@ -1,35 +0,0 @@ -// -// GLLItemOptionalPartMarker.m -// GLLara -// -// Created by Torsten Kammer on 18.04.18. -// Copyright © 2018 Torsten Kammer. All rights reserved. -// - -#import "GLLItemOptionalPartMarker.h" - -#import "GLLItem.h" - -@implementation GLLItemOptionalPartMarker - -- (id)initWithItem:(GLLItem *)item { - if (!(self = [super init])) - return nil; - - _item = item; - - return self; -} - -- (NSUInteger)hash { - return [self.item hash]; -} - -- (BOOL)isEqual:(id)object { - if (![object isMemberOfClass:[self class]]) - return NO; - - return [self.item isEqual:[(GLLItemOptionalPartMarker *) object item]]; -} - -@end diff --git a/GLLara/GLLItemOptionalPartMarker.swift b/GLLara/GLLItemOptionalPartMarker.swift new file mode 100644 index 0000000..0124d59 --- /dev/null +++ b/GLLara/GLLItemOptionalPartMarker.swift @@ -0,0 +1,35 @@ +// +// GLLItemOptionalPartMarker.swift +// GLLara +// +// Created by Torsten Kammer on 18.04.18. +// Copyright © 2018 Torsten Kammer. All rights reserved. +// + +import Foundation + +/** + * A simple object that only contains a GLLItem; used for selection to mark that + * the "optional parts" section was selected. + * + * Equality and hash code: Two of these are equal - and have equal hash codes - + * if the underlying items are. + */ +@objc class GLLItemOptionalPartMarker: NSObject { + @objc init(item: GLLItem) { + self.item = item + } + + @objc let item: GLLItem + + override func isEqual(_ object: Any?) -> Bool { + guard let other = object as? GLLItemOptionalPartMarker else { + return false + } + return self.item == other.item + } + + override var hash: Int { + return item.hash + } +} diff --git a/GLLara/GLLOptionalPartController.m b/GLLara/GLLOptionalPartController.m index 6cd00c8..a613d29 100644 --- a/GLLara/GLLOptionalPartController.m +++ b/GLLara/GLLOptionalPartController.m @@ -8,7 +8,7 @@ #import "GLLOptionalPartController.h" -#import "GLLItemOptionalPartMarker.h" +#import "GLLara-Swift.h" @implementation GLLOptionalPartController