gpt4 book ai didi

ios - Swift,MyClass,可选(MyClass?),不可转换为 MyClass

转载 作者:行者123 更新时间:2023-11-29 05:42:19 27 4
gpt4 key购买 nike

我尝试使用泛型为 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com