使用Swift 4.1 (Xcode 9.3),我尝试创建一组Int,但是我得到:
类型'Int‘不符合协议'Hashable’
但据我所知,说,只要数组的值符合哈斯可,它现在就符合哈斯可。作为一个解决办法,我有:
extension Array: Hashable where Element == Int {
public var hashValue: Int {
return debugDescription.hashValue
}
}
但我还是想知道为什么我不能免费得到哈斯。
我在学斯威夫特,但我有点拘泥于基本知识。从Apple下载了一个示例项目,但仍然不知道这两者之间有什么区别:
我的结构:
import Foundation
import SwiftUI
import CoreLocation
struct Store: Hashable, Codable, Identifiable {
var id: Int
var name: String
var categories: [Category]
private var logoName: String
var logo: Image {
Image(
Swift中的Hashable协议要求您实现一个名为hashValue的属性
protocol Hashable : Equatable {
/// Returns the hash value. The hash value is not guaranteed to be stable
/// across different invocations of the same program. Do not persist the hash
/// value across program runs.
///
/// The value of `ha
我编写了以下扩展以从Array中删除重复项。
extension Array where Element : Equatable{
func removeDups() -> [Element]{
var result = [Element]()
for element in self{
if !result.contains(element){
result.append(element)
}
}
return result
据我所知,协议是没有实际实现的属性、方法和其他需求的蓝图。协议的一致性意味着提供蓝图的实际实现。但是,我经常看到类和结构采用协议,而实际上没有提供实现。
例如:
class Item: Codable {
var title: String = ""
var done: Bool = false
}
var itemArray = [Item]()
let encoder = PropertyListEncoder()
do {
let data = try encoder.encode(itemArray)
try data.write(to
我已经定义了一个枚举来表示一个“站点”的选择;站点是由一个唯一的正整数定义的,所以我创建了下面的枚举,以允许负值表示特殊的选择:
enum StationSelector : Printable {
case Nearest
case LastShown
case List
case Specific(Int)
func toInt() -> Int {
switch self {
case .Nearest:
return -1
case .LastShown:
你好,我有一个关于确认协议‘哈斯可’的问题。真的很烂。这是我的模型:
struct Page: Decodable, Identifiable {
var id: String
var name: String
var thumbnail: String?
var description: String
var type: String
var speechs: [String]
}
struct ExploreDataSource: Decodable, Hashable {
var title: String
var
我想要创建一个不限制键类型的Dictionary (如NSDictionary)
所以我试着
var dict = Dictionary<Any, Int>()
和
var dict = Dictionary<AnyObject, Int>()
结果
error: type 'Any' does not conform to protocol 'Hashable'
var dict = Dictionary<Any, Int>()
^
<REPL>:5:12: error: cannot co
我正在尝试创建一个类,它将定义可扩展表视图所需的属性。因此,我需要一个类,在这个类中,我可以声明一个引用同一个类的属性(可扩展的父行childs)。
下面是我的代码:
public class ExpandableCell
{
var icon : String
/// The title for the cell.
var title: String
/// The childs of the cell
var childs: Set<ExpandableCell> = Set<ExpandableCell>()
}
但
假设我有一个基类"Person“,我想将它添加到一个集合(列表)中,因此需要符合Hashable和Equatable:
class Person : Equatable, Hashable {
let firstName: String
let lastName: String
var nickname: String?
let dateOfBirth: NSDate
var hashValue: Int {
if let nickname = nickname {
return firstName.hashValue ^
last
我定义了两个泛型函数
func job<T: Comparable>(x: T) {
println("1")
}
func job<T: Hashable>(x: T) {
println("2")
}
当我试图给其中之一打电话时,例如:
let myInt: Int = 1 // Explicit Int just for clarity of the example
job(myInt)
当然,斯威夫特抱怨并抛出一个错误
模糊使用“作业”
这是可以理解的,因为不清楚我是要使用可比较的 one还是Hashable (Int符
我是程序初学者,请原谅这个天真的问题。Swift是我的第一语言,我没有引用(其他编程语言)来比较这种类型约束对协议扩展的好处。
就我个人而言,我只是感到困惑和奇怪。为什么存在对协议扩展的Type约束?它的意义是什么?
protocol TeamRecord {
var wins: Int { get }
var losses: Int { get }
func winningPercentage() -> Double
}
//Constraint:
extension CustomStringConvertible where Self: TeamRecord {
v
有没有人知道如何使用用户定义的类实现集合操作,并将其属性作为操作条件。例如:
class myClass {
var figure: Int!
}
let classObj1 = myClass()
classObj1.figure = 1
let classObj2 = myClass()
classObj2.figure = 2
let classObj3 = myClass()
classObj3.figure = 1
let set1: Set = [classObj1]
let set2: Set = [classObj2, classObj3]
有没有像这样的方法:
简单的问题,但我不知道为什么!
创建一个类- A,B类从B扩展。
创建一个集合
公共变量hm :B: Int =
A类-定义:
class A : Hashable {
var x : Double = 0
var y : Double = 0
init(x : Double, y : Double) {
self.x = x
self.y = y
}
var hashValue : Int {
get {
// IMPORTANT!!! Do some operat
假设我有一个struct,它可以是任何东西:
struct Cube {
var x: Int
var y: Int
var z: Int
var width: Int
// ...
}
然后如何创建这些点的Set,这样就不会有两个具有相同属性的对象了?
let points: Set<Cube> = Set()
// Type ‘Cube’ does not conform to protocol ‘Hashable’
但目前还不清楚如何实现哈斯可。从我所读到的内容来看,我需要创建一个散列函数,但这看上去并不容易,因为我在结构中拥有大量的属
我有一组问题,每个问题都有一个唯一的lineID。问题是,当我从服务器同步问题时,有时( 1000次同步时1次)问题是重复的。我有56个问题而不是28个问题。我想以某种方式过滤问题数组,如果有2个问题具有相同的lineID (重复),则只将1附加到我的对象数组中。有人能帮我解决这个问题吗? // Get the questions from CoreData.
func loadQuestionsUsing(templateId: Int) {
do {
guard let questions = try Question.getQuestions(tem
我试图让我的struct卡符合可使用协议(用于字典),但出于某种原因,Xcode没有用红色错误对我大喊大叫,比如"Type ' Card‘不符合协议'Hashable’。我不明白为什么。我想让Xcode添加协议存根。“
import Foundation
struct Card : Hashable {
var isFaceUp = false
var isMatched = false
var identifier : Int
private static var identifierFactory = 0
在下面的代码中,我得到了一个错误[String : Double] does not conform to Hashable。我怎么才能避开这一切?
我看到了不符合哈斯可协议的问题,但我想知道为什么会出现这种情况,而另一种方式是有效的。是否只需要字典中的“键”才能向哈斯可确认?一些解释会有帮助
enum someEnumType {
case First(String, (Int, Int)->Int)
case Second (String, Int)
}
// var operations = [someEnumType : [String : Double]]
我有一个用于几个枚举的协议,其中包括SWIFT4.2的CaseIterable。
public protocol CycleValue: CaseIterable {
/// Computed property that returns the next value of the property.
var nextValue:Self { get }
}
我的CycleValue用例中有一个主题属性:
@objc public enum AppThemeAttributes: CycleValue {
case classic, darkMode // etc.
我目前正在构建一个ios应用程序,我似乎有以下问题
Referencing initializer 'init(_:content:)' on 'ForEach' requires that 'Planet' conform to 'Identifiable'
这是我目前的代码:
//
// OnboadingView.swift
// Planets (iOS)
//
// Created by Andres Haro on 9/28/21.
//
import SwiftUI
struct OnboadingView
访问Set元素很快,Set类型必须是hashable。
我认为Swift只存储每个元素的散列值,但我发现原始值(不是散列值)也可以访问。例如:
var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]
for genre in favoriteGenres {
print("\(genre)")
}
输出:
// Jazz
// Hip hop
// Classical
swift如何在内存中存储Set type并访问它?
我想做这样的事情:
enum TestEnum {
case all
case some(_ testElements: Set<TestElement>)
}
public protocol TestElement: Hashable {
var identifier: String { get }
}
但我知道这个错误:
协议“TestElement”作为一种类型不能符合“哈斯可”
我能做什么?谢谢你的帮助