From 2feafb86b665f4e094f014fe9a8b6c1bd5521004 Mon Sep 17 00:00:00 2001 From: mlch911 Date: Wed, 12 Feb 2025 10:40:23 +0800 Subject: [PATCH] Fix Bug: inherit from NSObject --- Sources/Macros/Singleton/SingletonMacro.swift | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Sources/Macros/Singleton/SingletonMacro.swift b/Sources/Macros/Singleton/SingletonMacro.swift index 94b9bf1..9e32c7c 100644 --- a/Sources/Macros/Singleton/SingletonMacro.swift +++ b/Sources/Macros/Singleton/SingletonMacro.swift @@ -14,7 +14,18 @@ struct SingletonMacro: MemberMacro { let nameOfDecl = try name(providingMembersOf: declaration).text let isPublic = declaration.modifiers.map(\.name.tokenKind.keyword).contains(.public) - let initializer = try InitializerDeclSyntax("private init()") {} + + // 检查是否继承自NSObject + let inheritsFromNSObject = if let classDecl = declaration.as(ClassDeclSyntax.self) { + classDecl.inheritanceClause?.inheritedTypes.contains { type in + type.type.as(IdentifierTypeSyntax.self)?.name.text == "NSObject" + } ?? false + } else { + false + } + + // 根据是否继承NSObject决定init方法是否需要override + let initializer = try InitializerDeclSyntax(inheritsFromNSObject ? "private override init()" : "private init()") {} let shared = "\(isPublic ? "public" : "") static let shared = \(nameOfDecl)()"