尽管在类中声明了变量,但无法在范围内找到
Posted
技术标签:
【中文标题】尽管在类中声明了变量,但无法在范围内找到【英文标题】:Cannot Find In Scope Despite Variable Declared In Class 【发布时间】:2021-06-12 04:36:34 【问题描述】:我正在使用 Swift 在 Xcode 上编写一个基本的 fps 应用程序。错误出现在我的 Bitmap.swift 文件中,该文件旨在将像素存储在 2D 数组中,以便可以在应用程序中表示整个图像。
代码如下:
import UIKit
class Bitmap: UIViewController
public struct Bitmap
public private(set) var pixels: [Color]
public let width: Int
public init(width: Int, pixels: [Color])
self.width = width
self.pixels = pixels
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view.
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
*/
extension Bitmap
var height: Int
return pixels.count / width
subscript(x: Int, y: Int) -> Color
get return pixels[y * width + x]
set pixels[y * width + x] = newValue
convenience init(width: Int, height: Int, color: Color)
self.pixels = Array(repeating: color, count: width * height)
self.width = width
尽管在我的类中声明了“像素”和“宽度”,但我的扩展函数仍然收到这些错误:
“在范围内找不到‘像素’” “在范围内找不到‘宽度’” “‘位图’类型的值没有成员‘像素’” "'Bitmap' 类型的值没有成员 'width'"
编辑:这是我的另一个文件“Color.swift”的代码
import UIKit
class Color: UIViewController
public struct Color
public var r, g, b, a: UInt8
public init(r: UInt8, g: UInt8, b: UInt8, a: UInt8 = 255)
self.r = r
self.g = g
self.b = b
self.a = a
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view.
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
*/
extension Color
static let clear = Color(r: 0, g: 0, b: 0, a: 0)
static let black = Color(r: 0, g: 0, b: 0)
static let white = Color(r: 255, g: 255, b: 255)
static let gray = Color(r: 192, g: 192, b: 192)
static let red = Color(r: 255, g: 0, b: 0)
static let green = Color(r: 0, g: 255, b: 0)
static let blue = Color(r: 0, g: 0, b: 255)
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:您同时拥有一个class
和一个名为Bitmap
的struct
。我猜class
是错误的,因为你描述了你打算如何使用它。
去掉struct
周围的class
,去掉convenience
,struct
s没有用到:
public struct Bitmap
public private(set) var pixels: [Color]
public let width: Int
public init(width: Int, pixels: [Color])
self.width = width
self.pixels = pixels
extension Bitmap
var height: Int
return pixels.count / width
subscript(x: Int, y: Int) -> Color
get return pixels[y * width + x]
set pixels[y * width + x] = newValue
init(width: Int, height: Int, color: Color)
self.pixels = Array(repeating: color, count: width * height)
self.width = width
【讨论】:
Bitmap 作为一个整体意味着是一种表示整个图像的类型,扩展函数意味着作为图像高度的计算属性,以及用于创建空图像的便利初始化程序.删除类不会使其余代码无用,因为它无法在范围内找到位图吗? @Hegazy1738 删除类与Bitmap
是否在范围内无关(实际上,几乎相反,因为您之前因隐藏名称而出错)。也许你的意思是别的?您认为它应该是UIViewController
有什么原因吗?我提供的代码编译得很好,并且似乎符合您在问题 和 您的评论中的描述。你试过了吗?
是的,我做到了,在复制和粘贴您的代码后,我仍然遇到同样的错误。无论我把公共结构函数放在哪里(因为扩展必须在类之外,不能在里面)它总是给我同样的错误。
我给你的代码编译得很好。复制到一个空白项目中,您将能够看到它。我担心你说“扩展必须在课堂之外”——在我的例子中没有更多的课堂。可能的问题:1)您需要清理和重建您的项目 2)您的项目中有其他代码(可能是 Bitmap
的另一个声明?)影响此问题未包含在您的问题中。
现在一切正常。非常感谢!我真的很感激。以上是关于尽管在类中声明了变量,但无法在范围内找到的主要内容,如果未能解决你的问题,请参考以下文章