小编Luc*_*ioB的帖子

在xcode8中找不到ModuleName-Swift.h文件

我正在努力研究一个混合的Swift和ObjectiveC项目而没有运气.

我的项目由6个目标组成:

  • 应用
  • 核心
  • CoreTest
  • 摘要
  • WatchKit扩展
  • WatchKit应用程序

我已经能够添加一个具有一个目标成员资格(App)的Swift类,并使用从App-Bridging-Header.h传递的ObjectiveC代码 ."ObjectiveC into Swift code"范例就像一个魅力.

相反,我正在努力解决"Swift into ObjectiveC code"范式.在特定情况下,我需要在ObjectiveC .m文件中使用一个新的Swift类,该文件是四个目标的成员.

到目前为止我一直在做的是:

  1. 将新的Swift文件添加到Core项目,指定四个成员资格(App,Core,Summary,WatchKit Ext)
  2. XCode要求为三个项目创建-Bridging-Header.h Core,Summary和WatchKit Ext(App-Bridging-Header.h已经存在,因为之前已经使用过),我同意(不知道为什么它会在里面创建这些文件)我添加我的Swift类的同一组文件夹但是没关系)
  3. 我创建了Swift类,在前添加了@objc
  4. 我去检查是否为所有模块设置了Objective-C Generated Interface Header Name,是的
  5. 我去检查所有模块中的Defines Module是否设置为No,并在主项目中设置为Yes,是的
  6. 我写下了所有四个目标的-Swift.h文件的导入
  7. 在我的Objective-C类中,我尝试使用我的新Swift类,显然它似乎工作(甚至自动完成)
  8. 我尝试构建项目,但它没有说没有找到-Swift.h文件

我已经按照Apple混合和匹配指南和许多SO线程,包括这个似乎显然是为了解决我的同样问题,但它不起作用.

也见过这个这个但是没有用.

还尝试过删除派生数据以及多次清理整个项目而没有运气.

编辑1:更多细节

这是我的Swift类导入RealmSwift的声明

@objc class MyClass: Object {}
Run Code Online (Sandbox Code Playgroud)

这是在ObjectiveC中使用Swift类的片段

MyClass *app = [[MyClass alloc] …
Run Code Online (Sandbox Code Playgroud)

xcode objective-c ios swift xcode8

30
推荐指数
3
解决办法
3万
查看次数

ReactJS - 提升状态与保持本地状态

在我的公司,我们正在将Web应用程序的前端迁移到ReactJS.我们正在使用create-react-app(更新到v16),没有Redux.现在我停留在一个页面上,可以通过以下图像简化结构:

页面结构

componentDidMount()MainContainer 的方法中使用相同的后端请求检索由三个组件(SearchableList,SelectableList和Map)显示的数据.然后,此请求的结果将存储在MainContainer的状态中,并且具有或多或少的结构:

state.allData = {
  left: {
    data: [ ... ]
  },
  right: {
    data: [ ... ],
    pins: [ ... ]
  }
}
Run Code Online (Sandbox Code Playgroud)

LeftContainer state.allData.left从MainContainer 接收作为prop ,并props.left.data再次传递给SearchableList作为prop.

RightContainer state.allData.right从MainContainer 接收作为prop ,并传递props.right.data给SelectableList和props.right.pinsMap.

SelectableList显示一个复选框以允许对其项目执行操作.每当在SelectableList组件的项目上发生动作时,它可能对Map引脚有副作用.

我决定在RightContainer状态下存储一个列表,该列表保留SelectableList显示的所有项目ID; 此列表作为道具传递给SelectableList和Map.然后我向SelectableList传递一个回调函数,无论何时进行选择都会更新RightContainer中的id列表; 新的道具到达SelectableList和Map,因此render()在两个组件中都会调用.

它工作正常,有助于保持RightContainer中SelectableList和Map可能发生的一切,但我问这是否适用于提升状态单一来源的概念.

作为可行的替代方案,我想到为MainContainer中的_selected每个项添加一个属性state.right.data,并将select回调三个级别传递给SelectableList,处理MainContainer中的所有可能操作.但是一旦选择事件发生,这将最终强制加载LeftContainer和RightContainer,引入了实现逻辑的需要,shouldComponentUpdate()以避免无用,render()特别是在LeftContainer中.

从架构和性能的角度来看,哪个/可能是优化此页面的最佳解决方案?

下面是我的组件摘录,以帮助您了解情况.

MainContainer.js

class MainContainer extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      allData: {}
    }; …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs create-react-app

19
推荐指数
2
解决办法
6606
查看次数