Работа с Свифт и Core-Data, у меня есть следующая функция, которая полезна для вставки новой записи в объекте:Swift и Core-Data, тип класса в качестве параметра
func insertObject (entityName: String, dico: NSDictionary) {
var newItem = NSEntityDescription.insertNewObjectForEntityForName(entityName, inManagedObjectContext:managedObjectContext!) as! EventList
for (key, value) in dico {
newItem.setValue(value, forKey: key as! String)
}
var error : NSError? = nil
managedObjectContext!.save(&error)
}
Хотя это работает , есть одна проблема: тип «EventList» жестко закодирован в функции, и это не очень хорошо, если я хочу использовать эту функцию для общего использования. В идеале я хотел бы передать параметр: введите функцию, а затем используйте вместо «EventList».
Это возможно и как? То, что я нашел в сети, кажется непонятным и на пределе моего нынешнего знания Свифта.
=== Обновление после дальнейшего эксперимента ===
После некоторые советы я получил от корма спины и после того, как взглянуть на то, как работают генерики, я переделал свою функцию следующим образом:
func insertObject <T:NSManagedObject> (entityName:String,dico:NSDictionary) {
var newItem = NSEntityDescription.insertNewObjectForEntityForName(entityName, inManagedObjectContext:managedObjectContext!) as! T
for (key, value) in dico {
newItem.setValue(value, forKey: key as! String)
}
var error : NSError? = nil
managedObjectContext!.save(&error)
}
Я не получил какой-либо ошибки на конкретной строке кода, но получил следующую большую ошибку-сообщение в выпуске навигатора:
CompileSwift нормальный ARMv7 /Users/abcxyz/Документы/IOS/LibBin/Swift_CoreDataBox/CoreDataBox.swift кд/Пользователи/abcxyz/Документы/IOS/MyAp /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -c -primary- file /Users/abcxyz/Documents/iOS/LibBin/Swift_CoreDataBox/CoreDataBox.swift /Users/abcxyz/Documents/iOS/MyAp/MyAp/RootViewController.swift /Пользователи/abcxyz/Documents/iOS/MyAp/MyAp/ModelController. скор /Users/abcxyz/Documents/iOS/MyAp/MyAp/DataViewController.swift /Users/abcxyz/Documents/iOS/MyAp/MyAp/MyAp.swift /Пользователи/abcxyz/Документы/IOS/MyAp/MyAp/AppDelegate .swift /Users/abcxyz/Documents/iOS/MyAp/MyAp/DataInput_ViewController.swift -target armv7-apple-ios7.1 -enable-objc-interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk -I/Пользователи/abcxyz/Библиотека/Разработчик/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Продукты/Debug-iphoneos -F/Пользователи/abcxyz/Библиотека/Разработчик/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Products/Debug-iphoneos -g -module-cache-path/Пользователи/abcxyz/Библиотека/Разработчик/Xcode/DerivedData/ModuleCache -serialize-debugging-options -Xcc -I/Пользователи/abcxyz/Библиотека/Разработчик/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug-iphoneos/MyAp.build/swift -overrides.hmap -Xcc -iquote -Xcc /Users/abcxyz/Library/Developer/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug-iphoneos/MyAp.build/MyAp-generated-files. hmap -Xcc -I/Пользователи/abcxyz/Библиотека/Разработчик/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug-iphoneos/MyAp.build/MyAp-own-target-headers.hmap -Xcc - I/Users/abcxyz/Library/Developer/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug-iphoneos/MyAp.build/MyAp-all-target-headers.hmap -Xcc -iquote -Xcc /Users/abcxyz/Library/Developer/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug-iphoneos/MyAp.build/MyAp-project-headers.hmap -Xcc -I/Пользователи/abcxyz/Библиотека/Разработчик/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Products/Debug-iphoneos/include -Xcc -I/Applications/Xcode.app/Содержание/Разработчик/Toolchains/XcodeDefault.xctoolchain/usr/include -Xcc -I/Пользователи/abcxyz/Библиотека/Разработчик/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug-iphoneos/MyAp.build/DerivedSources/armv7 -Xcc - I/Users/abcxyz/Library/Developer/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug-iphoneos/MyAp.build/DerivedSources -Xcc -DDEBUG = 1 -Xcc -working-directory/Пользователи/abcxyz/Documents/iOS/MyAp -emit-module-doc-путь /Users/abcxyz/Library/Developer/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug-iphoneos/MyAp.build/Objects -normal/armv7/CoreDataBox ~ partial.swiftdoc -Onone -module-name Me -emit-module-path /Users/abcxyz/Library/Developer/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug- iphoneos/MyAp.build/Objects-normal/armv7/CoreDataBox ~ partial.swiftmodule -serialize-diagnostics-path /Users/abcxyz/Library/Developer/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug-iphoneos/MyAp.build/Objects-normal/armv7/CoreDataBox.dia -emit-dependencies-path /Users/abcxyz/Library/Developer/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug-iphoneos/MyAp.build/Objects-normal/armv7/CoreDataBox.d - emit-reference-dependencies-path /Users/abcxyz/Library/Developer/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug-iphoneos/MyAp.build/Objects-normal/armv7/CoreDataBox.swiftdeps -о /Users/abcxyz/Library/Developer/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug-iphoneos/MyAp.build/Objects-normal/armv7/CoreDataBox.o
0 быстрые 0x00000001007e92b8 LLVM :: SYS :: PrintStackTrace (__ sFILE *) + 40 1 быстрое
0x00000001007e9794 SignalHandler (INT) + 452 2 libsystem_platform.dylib 0x00007fff96272f1a _sigtramp + 26 3 libsystem_platform.dylib 0x7994a32ea448635d _sigtramp + 237057117 4 быстрые 0x000000010016c076 быстрого :: irgen :: emitPolymorphicArguments (быстрое :: irgen :: IRGenFunction &, быстра :: CanTypeWrapper, быстра :: CanTypeWrapper, LLVM :: ссылка на массив, быстрое :: irgen :: взрыва &) + 630 5 swift 0x00000001001b6d0f swift :: SILVisitor < (anony МЫ пространства имен) :: IRGenSILFunction, пустоты> :: Визит (быстрое :: ValueBase *) + 40287 6 быстрый
0x00000001001ac39d быстр :: irgen :: IRGenModule :: emitSILFunction (быстрый :: SILFunction *) + 9901 7 быстрых 0x0000000100116f4f быстр :: irgen :: IRGenModule :: emitGlobalTopLevel() + 159 8 стремительных
0x0000000100196c59 performIRGeneration (стремительный :: IRGenOptions &, быстры :: Module *, быстра :: SILModule *, LLVM :: StringRef, LLVM: : LLVMContext &, swift :: SourceFile *, unsigned int) + 2121 9 swift 0x0000000100197693 swift :: performIRGeneration (swift :: IRGenOptions &, swift :: SourceFile &, быстра :: SILModule *, LLVM :: StringRef, LLVM :: LLVMContext &, беззнаковое целое) + 51 10 быстрого
0x00000001000d3087 frontend_main (LLVM :: ссылки на массив, символ сопза *, * недействительный) + 6647 11 быстрое 0x00000001000d14e6 главная + 1814 12 libdyld.dylib 0x00007fff947a35c9 старт + + 1803930233 дамп 1 13 libdyld.dylib 0x0000000000000041 начать стека: 0. аргументы программы: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -c -primary-file /Users/abcxyz/Documents/iOS/LibBin/Swift_CoreDataBox/CoreDataBox.swift /Пользователи/abcxyz/Documents/iOS/MyAp/MyAp/RootViewController.скор /Users/abcxyz/Documents/iOS/MyAp/MyAp/ModelController.swift /Users/abcxyz/Documents/iOS/MyAp/MyAp/DataViewController.swift /Пользователи/abcxyz/Документы/IOS/MyAp/MyAp/MyAp .swift /Users/abcxyz/Documents/iOS/MyAp/MyAp/AppDelegate.swift /Users/abcxyz/Documents/iOS/MyAp/MyAp/DataInput_ViewController.swift -target ARMv7-яблочно-ios7.1 -enable-ObjC -interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk -I/Пользователи/abcxyz/Библиотека/Разработчик/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Создание/Продукты/Debug-iphoneos -F/Пользователи/abcxyz/Библиотека/Разработчик/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Products/Debug-iphoneos -g -module-cache-pat h/Пользователи/abcxyz/Библиотека/Разработчик/Xcode/DerivedData/ModuleCache -serialize-debugging-options -Xcc -I/Пользователи/abcxyz/Библиотека/Разработчик/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build /Debug-iphoneos/MyAp.build/swift-overrides.hmap -Xcc -iquote -Xcc /Users/abcxyz/Library/Developer/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug-iphoneos/ MyAp.build/MyAp-generated-files.hmap -Xcc -I/Пользователи/abcxyz/Библиотека/Разработчик/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug-iphoneos/MyAp.build/MyAp -own-target-headers.hmap -Xcc -I/Пользователи/abcxyz/Библиотека/Разработчик/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug-iphoneos/MyAp.build/MyAp-all- target-headers.hmap -Xcc -iquote -Xcc/Пользователи/abcxyz/Библиотека /Developer/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug-iphoneos/MyAp.build/MyAp-project-headers.hmap -Xcc -I/Пользователи/abcxyz/Библиотека/Разработчик/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Products/Debug-iphoneos/include -Xcc -I/Приложения/Xcode.app/Содержание/Разработчик/Toolchains/XcodeDefault.xctoolchain/usr/include -Xcc -I/Пользователи/abcxyz/Библиотека/Разработчик/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug-iphoneos/MyAp.build/DerivedSources/armv7 -Xcc -I/Пользователи/abcxyz/Библиотека/Разработчик/Xcode/DerivedData/MyAp -ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug-iphoneos/MyAp.build/DerivedSources -Xcc -DDEBUG = 1 -Xcc -working-directory/Users/abcxyz/Documents/iOS/MyAp -emit-module-doc- путь/Пользователи/abcxyz/Библиотека/Разработчик/Xcode/Deri vedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug-iphoneos/MyAp.build/Objects-normal/armv7/CoreDataBox ~ partial.swiftdoc -Onone -module-name Me -emit-module-path/Users/abcxyz /Library/Developer/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug-iphoneos/MyAp.build/Objects-normal/armv7/CoreDataBox~partial.swiftmodule -serialize-diagnostics-path/Users/abcxyz/Library/Developer/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug-iphoneos/MyAp.build/Objects-normal/armv7/CoreDataBox.dia -emit-dependencies-path/Users/abcxyz /Library/Developer/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates/MyAp.build/Debug-iphoneos/MyAp.build/Objects-normal/armv7/CoreDataBox.d -emit-reference-dependencies-path/Users/abcxyz/Library/Developer/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkd jut/Build/Intermediates/MyAp.build/Debug-iphoneos/MyAp.build/Objects-normal/armv7/CoreDataBox.swiftdeps -o/Пользователи/abcxyz/Библиотека/Разработчик/Xcode/DerivedData/MyAp-ehmiuzpyuhwbkpfvduswfbhkdjut/Build/Intermediates /MyAp.build/Debug-iphoneos/MyAp.build/Objects-normal/armv7/CoreDataBox.o
- в то время как излучающие функции ИК-SIL @ _TToFC2Me11CoreDataBox12insertObjectfS0_U__FTSS4dicoCSo12NSDictionary_T_ для '' insertObject в /Пользователи/abcxyz/Документы/Ios/LibBin/Swift_CoreDataBox/CoreDataBox.скоро: 98: 5
Сделать его общим! :) – HAS
Это, наверное, хороший совет, как мне это сделать? Легко ли (просто)? – Michel
У меня нет компилятора прямо сейчас, но это должно быть что-то по строкам 'func insertObject (entityName: String, dictionary: NSDictionary', а когда вы вынуждаете его переводить в' EventList', то вместо него следует использовать 'T'. –
HAS