如何更改不同类中的变量? (iOS,Swift)

时间:2017-04-12 18:27:30

标签: ios swift class variables

我在Storyboard中有3个View Controller。他们被命名为" Letters"," Numbers"和" Other"。

我想要的是一个根据最后使用的类别而变化的变量。

Ex:用户转到 class App extends React.Component { constructor() { super(); this.state = { lightboxIsOpen: true, currentImage: 0, } this.closeLightbox = this.closeLightbox.bind(this); this.gotoNext = this.gotoNext.bind(this); this.gotoPrevious = this.gotoPrevious.bind(this); this.gotoImage = this.gotoImage.bind(this); this.handleClickImage = this.handleClickImage.bind(this); this.openLightbox = this.openLightbox.bind(this); } openLightbox (index, event) { event.preventDefault(); this.setState({ currentImage: index, lightboxIsOpen: true, }); } gotoPrevious() { this.setState({ currentImage: this.state.currentImage - 1, }); } gotoNext() { this.setState({ currentImage: this.state.currentImage + 1, }); } gotoImage (index) { this.setState({ currentImage: index, }) } handleClickImage () { if (this.state.currentImage === this.props.images.length - 1) return; this.gotoNext(); } closeLightbox() { this.setState({ currentImage: 0, lightboxIsOpen: false, }); } renderGallery () { const { images } = this.props; if (!images) return; const gallery = images.filter(i => i.useForDemo).map((obj, i) => { return ( <a href={obj.src} className={css(classes.thumbnail, classes[obj.orientation])} key={i} onClick={(e) => this.openLightbox(i, e)} > <img src={obj.thumbnail} className={css(classes.source)} /> </a> ); }); return ( <div className={css(classes.gallery)}> {gallery} </div> ); } render() { return ( <div className="section"> {this.props.heading && <h2>{this.props.heading}</h2>} {this.props.subheading && <p>{this.props.subheading}</p>} {this.renderGallery()} <Lightbox currentImage={this.state.currentImage} images={[{ src: 'https://docs.google.com/uc?id=0B0huBtqYaof7N250S3JicmxxNmM' }]} isOpen={this.state.lightboxIsOpen} onClickImage={this.handleClickImage} onClickPrev={this.gotoPrevious} onClickNext={this.gotoNext} onClose={this.closeLightbox} onClickThumbnail={this.gotoImage} showThumbnails={this.props.showThumbnails} theme={this.props.theme} /> </div> ) } } ReactDOM.render( <App/>,document.getElementById("contents") ) 视图控制器(Letters),然后转到var categories = "Letters"视图控制器,并能够使用&#34;类别&#34 ;变量(仍为Other)。用户转到"Letters"视图控制器(Numbers),然后转到var categories = "Numbers"视图控制器,并且能够使用Other变量(现在为{{1} }})。

我不确定我的问题和示例是否足够明确,如果他们不能随意提问,我会尝试进一步解释。

非常感谢任何帮助。

提前致谢。

2 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点,但关键的概念是你不改变其他类中的变量,你改变类的实例(对象)中的东西。

我将尽力保持这一点。

所以,你可以创建一个具有App State种类的类

<img src="{{obj.image.url}}" />. 

然后,在代码中的任何位置,您都可以

public class AppState {
    public var category: String? = nil
    public static let shared = AppState()
}

AppState.shared.category = "Letters"

执行此操作不是最佳方式,但它会起作用并且很简单。为了更进一步,您可以了解依赖注入。使用它,不会有全局共享实例,而是将相应的AppState对象传递给需要它的对象。

答案 1 :(得分:0)

执行此操作的最佳方法是在每个视图控制器上创建一个名为categories的变量,并在呈现下一个视图控制器之前为其指定值。

示例:
信件视图控制器

var categories = [String]()

    func goToNextViewController()
    {
      let numbersVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "numbersVC")
      numbersVC.categories = self.categories
      self.presentViewController(numbersVC, animated: true, completion: nil)
    }

数字视图控制器

var categories = [String]()