     func swiftIdiomaticType() -> String {
         switch knownType {
         case is GIR.Record:
-            return typeRef.type.swiftName + "Ref" + ((isNullable || isOptional) ? "?" : "")
+            let typeName = knownRecordArgumentTypeName
+            return typeName
         case is GIR.Alias: // use containedTypes
             return ""
-        case is GIR.Bitfield:
-            return self.argumentTypeName + ((isNullable || isOptional) ? "?" : "")
-        case is GIR.Enumeration:
-            return self.argumentTypeName + ((isNullable || isOptional) ? "?" : "")
+        case is GIR.Bitfield, is GIR.Enumeration:
+            return optionalIfNullableOrOptional(argumentTypeName)
         default: // Treat as fundamental (if not a fundamental, report error)
-            return self.swiftSignalRef.fullSwiftTypeName + ((isNullable || isOptional) ? "?" : "")
+            return optionalIfNullableOrOptional(swiftSignalRef.fullSwiftTypeName)
         }
     }
 

    func swiftCCompatibleType() -> String {
        switch knownType {
        case is GIR.Record:
            return GIR.gpointerType.typeName + ((isNullable || isOptional) ? "?" : "")
        case is GIR.Alias: // use containedTypes
            return ""
        case is GIR.Bitfield:
            return GIR.uint32Type.typeName + ((isNullable || isOptional) ? "?" : "")
        case is GIR.Enumeration:
            return GIR.uint32Type.typeName + ((isNullable || isOptional) ? "?" : "")
        default: // Treat as fundamental (if not a fundamental, report error)
            return self.callbackArgumentTypeName
        }

        switch knownType {
        case is GIR.Record:
            if (isNullable || isOptional) {
                return "arg\(index).flatMap(\(knownRecordStructName).init(raw:))"
            }
            return knownRecordStructName + "(raw: arg\(index))"
        case is GIR.Alias: // use containedTypes
            return ""
        case is GIR.Bitfield:
