Ios 声明仅在文件范围出错时有效

Ios 声明仅在文件范围出错时有效,ios,swift,xcode,Ios,Swift,Xcode,有人能解释一下为什么扩建工程是这样的吗 我已经为我的主ViewController编写了一个扩展,其中包括一个函数: extension WeatherMainScreen { func load(lat: Double, long: Double){ service.getWeatherInfo(lat: lat, long: long) { [weak self] temp in self?.tempNumber.text = "\(temp.

有人能解释一下为什么扩建工程是这样的吗

我已经为我的主ViewController编写了一个扩展,其中包括一个函数:

extension WeatherMainScreen {
    func load(lat: Double, long: Double){
        service.getWeatherInfo(lat: lat, long: long) { [weak self] temp in
            self?.tempNumber.text = "\(temp.currently.temperature)"
            self?.results = temp.daily.data
            self?.tableView.reloadData()
         }
     }
 }
问题是,如果我将此扩展名放在ViewController类下,我会得到一个错误“声明仅在文件范围内有效”。但如果我把它放在上面,它就可以工作了

奇怪的是(对我来说)在这个特定的项目中,我的ViewController类有点大,但如果我在另一个项目中尝试这个扩展,它有更小的ViewController类,并将扩展放在它下面,一切正常,没有显示错误

问题是-为什么将扩展放在VC类之上是有效的,但是如果我放在VC类之下,它会显示这个“声明仅在文件范围内有效”错误

更多解释

这样就无法显示声明错误:

class WeatherMainScreen: UIViewController {
}
extension WeatherMainScreen {
// your code
}
通过这种方式工作:

extension WeatherMainScreen {
// your code
}
class WeatherMainScreen: UIViewController {
}

我没有在类中放置扩展名

ViewController大小不重要。将视图控制器放置在任何位置都会起作用。您可以从中阅读有关Swift访问修饰符的更多信息


还要确保您
WeatherMainScreen
public
open
类。

问题是-为什么将扩展名放在VC类之上有效,但如果我放在VC类之下,则会显示此“声明仅在文件范围内有效”错误?

答:扩展应该在根级别,而不是在任何类中

这是错误的。由于扩展插件嵌套在
WeatherMain屏幕中

class WeatherMainScreen: UIViewController { 
    extension WeatherMainScreen { // wrong as its declared inside the WeatherMainScreen
    // your code
    }
}
这是正确的,因为扩展是在根级别声明的

class WeatherMainScreen: UIViewController {
}
extension WeatherMainScreen { // correct way.
// your code
}

确切的问题是什么?你还提到你有一个错误,你能添加错误吗?请添加你得到的错误!抱歉,已修复文本。是否在类文件中添加扩展名?它需要在根级别?是的,就在我的课堂上file@navsegda那么请再解释一遍。我无法再现错误。这对我来说很好。最好清理项目并重新运行。