相关疑难解决方法(0)

在Swift中扩展嵌套类型

我有一个主类,也提供了一个命名空间:

class A {
}
Run Code Online (Sandbox Code Playgroud)

和一个通过扩展添加的嵌套类(所有这些都是为了使用单独的文件):

extension A {
  class B {
  }
}
Run Code Online (Sandbox Code Playgroud)

我想通过扩展它来为嵌套类(B)添加功能; 我试过了:

extension A.B {
}
Run Code Online (Sandbox Code Playgroud)

我得到"'B'不是'A'的成员类型".

(我也尝试了一些不太合理的东西,但我会在这里省略它们以避免尴尬.阅读Swift文档和谷歌搜索"快速嵌套类扩展"也没有得出答案.)

知道是否以及如何实现这一目标?


更新:

感谢user3441734试用它时,此代码在单个文件(或Playground)中按预期工作!

当3个部分位于单独的文件中时仍然不起作用,可能是当前Swift编译器实现中的一个错误.我将向Apple提交一份错误报告.

swift2

42
推荐指数
1
解决办法
4653
查看次数

Swift的标准库和名称冲突

我知道Swift不使用名称空间,但是这些名称是在每个模块中定义的.首先,我不太清楚如何避免名称冲突 - 随意详细说明.

不过,我的主要问题是:假设我想要一个不使用NSTreeNode的树结构,所以我创建了自己的名为"TreeNode"的类.现在让我们假设Apple决定在Swift的标准库中包含一个用于构建树的类,并且正如预期的那样,他们将其命名为"TreeNode".那么会发生什么?我的自定义TreeNode将与标准库的TreeNode冲突......在这种情况下我是否必须更改所有代码?或许Apple会承诺Swift的标准库将来不会改变?

编辑:问题在这里得到解答(感谢@Martin R的评论)

naming namespaces naming-conventions standard-library swift

13
推荐指数
1
解决办法
4369
查看次数

命名来自不同框架的扩展方法的冲突

作为测试,我创建了两个框架.两个框架都包含此扩展:

public extension UIDevice {
    var extraInfo: UIDeviceExtraInfo {
        return UIDeviceExtraInfo()
    }
}

public class UIDeviceExtraInfo {
    public var prop: String = "Device1"  //"Device2" is used in another framework
}
Run Code Online (Sandbox Code Playgroud)

然后我导入了两个框架并尝试打印UIDevice.currentDevice().extraInfo.prop.Swift编译器给出错误:Ambiguous use of extraInfo".

如何解决这样的名字冲突?

namespaces ios swift swift-extensions

13
推荐指数
2
解决办法
2421
查看次数

将Swift应用程序的组件划分为Swift模块

我正在Swift中编写一个iOS应用程序,我正在试图弄清楚如何将项目组织成单独的模块.我正在使用MVVM架构,我想让Model,ViewModel和View组件分开Swift模块,这些模块只能使导入它们的模块可以访问它们自己的子集.View中的文件将导入ViewModel,ViewModel中的文件将导入Model.我怎么能做到这一点?请注意,我不是要创建多个应用程序可以共享的库.我只是想使用模块强制分离组件.

编辑:也许问题是,"我应该使用什么机制来创建模块,而不是初始iOS应用程序项目附带的模块?"

"如何在Swift中使用命名空间?"中的答案之一 /sf/answers/1682300231/说,"类(等)是由它们所在的模块(Xcode目标)隐式确定的." 由此可以得出结论,目标对应于模块,答案是在Xcode项目中创建单独的目标,但我之前尝试过,而tskulbru说我需要多个Xcode项目.

关于多个Xcode项目,文件>新建>项目> iOS框架和库> Cocoa Touch Framework选项看起来不正确,因为它应该用于使用UIKit的东西,我想要创建的两个模块不应该依赖在UIKit上.另一个"框架和库"选项,Cocoa Touch静态库,不是Swift的选项.

使用私有Pod提到的另一个StackOverflow帖子.花了一个小时研究之后,我得出结论认为这不是正确的解决方案,因为我不应该在不同的工作空间中编辑这些模块.

xcode module mvvm swift

11
推荐指数
1
解决办法
5553
查看次数

结构,与核心数据对象类型同名?

我可以有一个与 Core Data 对象类型同名的结构吗?如果是这样,我如何在代码中区分两者?

编辑:例如,我有一个Track核心数据对象,当我从外部读取“跟踪”信息时,它是通过 json 传入的。我没有使用核心数据对象,因为它是一个托管对象,所以我使用了另一种结构。我也打算命名它Track,但是这可能会导致我不确定的冲突,所以目前我TrackStruct改为调用它。另外,这是正确的方法吗?

谢谢!

swift

5
推荐指数
1
解决办法
1987
查看次数

不同模块中的相同类名

我需要在 swift 5 中使用两个同名的类。为此,我在两个不同的模块中创建了这两个类,但我对如何在一个中使用这两个类感到困惑 UIViewController

我的一个班级Personmodels>student模块中,另一个班级Personmodels模块中

我试过导入类

import class models.student.Person

class BookViewController: UIViewController {
     var students:[Person] = [] //it should call models.student.Person
     var people: [Person] = [] //it should call models.Person
     ...
Run Code Online (Sandbox Code Playgroud)

但上面的 Person 类只是指向models.Person,它不是指向models.student.Person

模型中的 Person 类 > Person.swift 是

import Foundation

// MARK: - Person
public struct Person: Codable {
    public let firstName: String?
    public let lastName: String?
    public let address: String?
    public let phone: …
Run Code Online (Sandbox Code Playgroud)

ios swift swift5

3
推荐指数
1
解决办法
1432
查看次数