作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用泛型为 NSManagedObject 的子类提供通用方法,但当 Swift 似乎无法找到/将泛型转换为具体类时,我收到错误:
/// NSManagedObject+Helper.swift
///
import Foundation
extension NSManagedObject {
public static func inserta<T>() -> T? {
let name = self.entityName()
return CoreDataManager.createRow(inEntityNamed: name) as? T
}
}
/// MySwitch+CoreDataClass.swift
///
import Foundation
import CoreData
@objc(MySwitch)
public class MySwitch: NSManagedObject {
}
1 extension MySwitch {
2
3 @NSManaged public var key: String?
4 @NSManaged public var sValue: String?
5 @NSManaged public var value: String?
6
7 public class func insert(withKey key: String, value: String, sValue: String? = nil) throws -> MySwitch {
8 if let row = self.inserta() as? MySwitch {
9 row.key = key
10 row.value = value
11 if let sValue = sValue {
12 row.sValue = sValue
13 }
14 return row
15 }
16 throw CoreDataError.create_row
17 }
18 }
因此第 8 行中的调用会给出错误'MySwitch?'无法转换为“MySwitch”。
通过删除转换,我收到错误:无法推断通用参数“T”
将第 8 行更改为 MySwitch.self.inserta() as? MySwitch
它将显示相同的“MySwitch?”无法转换为“MySwitch”错误。
我想我错过了告诉 Swift T
是什么?是因为我也收到警告:
Cast from '_?' to unrelated type 'MySwitch' always fails
最佳答案
发现我遇到的泛型问题。我需要首先将 MySwitch 的变量声明为可选:
1 let mySwitch: MySwitch? = inserta()
2 if let row = mySwitch {...
这样我就可以告诉 Swift T
是什么类型。
关于ios - Swift,MyClass,可选(MyClass?),不可转换为 MyClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56446917/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!