Ryan Joseph wroteWhat are you trying to do exactly? There are categories in ObjC but those don't allow fields (they're like helpers in Object Pascal). If you need to share data between a bunch of different NSView subclasses then all you can do is make a common subclass or make the shared data a class of its own and pass that into all your subclasses. Nothing ObjC related about that however but I'm not sure what you're trying to do.
I have an NSView subclass with a bunch of fields and methods, and I wanted to be able to optionally swap that out with a parallel version derived from NSVisualEffectView without duplicating all of the code. I was hoping that adding generics to objcclass would be relatively trivial and just hadn't been asked for, but I know how assuming that usually goes.
More specifically, under LCL/Cocoa, TCustomControl's Handle uses a TCocoaManualScrollView(NSView) (in
lcl/interfaces/cocoa/cocoascrollers.pas) that has a bunch of code to interact with the LCL objects. When running recent versions of macOS in dark mode, custom controls like TTreeView actually use a behind-the-window blur rather than a plain clWindow FillRect. Since a lot of the TCocoaManualScrollView interaction is just general NSView messages or LCL protocol/category extensions, I figured I could keep the changes fairly small if I was able to just swap in a TCocoaManualScrollView<NSVisualEffectView>, which would avoid introducing another view in the hierarchy, keep the code cleaner, and be easier to disable if MACOS_MINIMUM_DEPLOYMENT_TARGET < 10.10.
I should be able to make it work with composition and re-parenting things when necessary, but there will be a lot more management code, so I thought I'd ask.
Zoë Peterson
Scooter Software