100% found this document useful (4 votes)
256 views

Beginning iPhone Development with SwiftUI: Exploring the iOS SDK (7th Edition) Wallace Wang 2024 scribd download

Wallace

Uploaded by

aroziwatar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (4 votes)
256 views

Beginning iPhone Development with SwiftUI: Exploring the iOS SDK (7th Edition) Wallace Wang 2024 scribd download

Wallace

Uploaded by

aroziwatar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 66

Download Full Version ebookmass - Visit ebookmass.

com

Beginning iPhone Development with SwiftUI:


Exploring the iOS SDK (7th Edition) Wallace Wang

https://ebookmass.com/product/beginning-iphone-development-
with-swiftui-exploring-the-ios-sdk-7th-edition-wallace-wang/

OR CLICK HERE

DOWLOAD NOW

Discover More Ebook - Explore Now at ebookmass.com


Instant digital products (PDF, ePub, MOBI) ready for you
Download now and discover formats that fit your needs...

Pro iPhone Development with SwiftUI: Design and Manage Top


Quality Apps (4th Edition) Wallace Wang

https://ebookmass.com/product/pro-iphone-development-with-swiftui-
design-and-manage-top-quality-apps-4th-edition-wallace-wang/

ebookmass.com

Beginning Programming. All-in-One 2nd Edition Wallace Wang

https://ebookmass.com/product/beginning-programming-all-in-one-2nd-
edition-wallace-wang/

ebookmass.com

Programming for Game Design: A Hands-On Guide with Godot


1st Edition Wallace Wang

https://ebookmass.com/product/programming-for-game-design-a-hands-on-
guide-with-godot-1st-edition-wallace-wang/

ebookmass.com

Abnormal Psychology 18th Edition Jill M Hooley

https://ebookmass.com/product/abnormal-psychology-18th-edition-jill-m-
hooley/

ebookmass.com
The Migration Turn and Eastern Europe: A Global Historical
Sociological Analysis Attila Melegh

https://ebookmass.com/product/the-migration-turn-and-eastern-europe-a-
global-historical-sociological-analysis-attila-melegh/

ebookmass.com

Final Offer: meet the new Dreamland billionaire...


(Dreamland Billionaires Book 3) Lauren Asher

https://ebookmass.com/product/final-offer-meet-the-new-dreamland-
billionaire-dreamland-billionaires-book-3-lauren-asher/

ebookmass.com

Marketing Tourist Destinations in Emerging Economies:


Towards Competitive and Sustainable Emerging Tourist
Destinations Ishmael Mensah
https://ebookmass.com/product/marketing-tourist-destinations-in-
emerging-economies-towards-competitive-and-sustainable-emerging-
tourist-destinations-ishmael-mensah/
ebookmass.com

Teaching Reading in Today's Elementary Schools, 12th


Edition Betty Roe

https://ebookmass.com/product/teaching-reading-in-todays-elementary-
schools-12th-edition-betty-roe/

ebookmass.com

Charlemagne and Rome Joanna Story

https://ebookmass.com/product/charlemagne-and-rome-joanna-story/

ebookmass.com
Biomarkers in Inborn Errors of Metabolism. Clinical
Aspects and Laboratory Determination 1st Edition Edition
Uttam Garg And Laurie D. Smith (Auth.)
https://ebookmass.com/product/biomarkers-in-inborn-errors-of-
metabolism-clinical-aspects-and-laboratory-determination-1st-edition-
edition-uttam-garg-and-laurie-d-smith-auth/
ebookmass.com
Beginning iPhone
Development
with Swif tUI
Exploring the iOS SDK

Seventh Edition

Wallace Wang
Beginning iPhone
Development with SwiftUI
Exploring the iOS SDK
Seventh Edition

Wallace Wang
Beginning iPhone Development with SwiftUI: Exploring the iOS SDK
Wallace Wang
San Diego, CA, USA

ISBN-13 (pbk): 978-1-4842-9540-3 ISBN-13 (electronic): 978-1-4842-9541-0


https://doi.org/10.1007/978-1-4842-9541-0
Copyright © 2023 by Wallace Wang
This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the
material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation,
broadcasting, reproduction on microfilms or in any other physical way, and transmission or information
storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now
known or hereafter developed.
Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with
every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an
editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the
trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not
identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to
proprietary rights.
While the advice and information in this book are believed to be true and accurate at the date of publication,
neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or
omissions that may be made. The publisher makes no warranty, express or implied, with respect to the
material contained herein.
Managing Director, Apress Media LLC: Welmoed Spahr
Acquisitions Editor: Miriam Haidara
Development Editor: James Markham
Coordinating Editor: Jessica Vakili
Distributed to the book trade worldwide by Springer Science+Business Media New York, 1 NY Plaza,
New York, NY 10004. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail [email protected], or
visit www.springeronline.com. Apress Media, LLC is a California LLC and the sole member (owner) is
Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a Delaware
corporation.
For information on translations, please e-mail [email protected]; for reprint,
paperback, or audio rights, please e-mail [email protected].
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and
licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales
web page at http://www.apress.com/bulk-sales.
Any source code or other supplementary material referenced by the author in this book is available to
readers on the Github repository: https://github.com/Apress/Beginning-iPhone-Development-with-
SwiftUI. For more detailed information, please visit http://www.apress.com/source-code.
Printed on acid-free paper
Table of Contents
About the Author����������������������������������������������������������������������������������������������������� xi

About the Technical Reviewer������������������������������������������������������������������������������� xiii

Chapter 1: Understanding iOS Programming������������������������������������������������������������ 1


Learning About Xcode������������������������������������������������������������������������������������������������������������������� 4
Switching Between iOS Devices������������������������������������������������������������������������������������������������� 11
Changing the iOS Device Emulation Appearance������������������������������������������������������������������������ 14
Selecting User Interface Objects������������������������������������������������������������������������������������������������� 17
Manipulating the Xcode Panes��������������������������������������������������������������������������������������������������� 17
Summary������������������������������������������������������������������������������������������������������������������������������������ 21

Chapter 2: Designing User Interfaces with SwiftUI������������������������������������������������ 23


Modifying the User Interface with the Inspector Pane���������������������������������������������������������������� 30
Summary������������������������������������������������������������������������������������������������������������������������������������ 38

Chapter 3: Placing Views on the User Interface����������������������������������������������������� 39


Using the Padding Modifier��������������������������������������������������������������������������������������������������������� 39
Defining Spacing Within a Stack������������������������������������������������������������������������������������������������� 42
Aligning Views Within a Stack����������������������������������������������������������������������������������������������������� 44
Using Spacers����������������������������������������������������������������������������������������������������������������������������� 46
Using the Offset and Position Modifiers�������������������������������������������������������������������������������������� 50
Summary������������������������������������������������������������������������������������������������������������������������������������ 56

iii
Table of Contents

Chapter 4: Working with Text��������������������������������������������������������������������������������� 57


Changing the Appearance of Text������������������������������������������������������������������������������������������������ 62
Using the Label View������������������������������������������������������������������������������������������������������������������� 71
Adding a Border Around a Text or Label View����������������������������������������������������������������������������� 75
Summary������������������������������������������������������������������������������������������������������������������������������������ 76

Chapter 5: Working with Images���������������������������������������������������������������������������� 77


Displaying Shapes����������������������������������������������������������������������������������������������������������������������� 77
Coloring a Shape������������������������������������������������������������������������������������������������������������������� 80
Coloring a Shape with Gradients������������������������������������������������������������������������������������������� 82
Displaying Images����������������������������������������������������������������������������������������������������������������������� 85
Clipping Images��������������������������������������������������������������������������������������������������������������������� 87
Adding Shadows to Images��������������������������������������������������������������������������������������������������� 88
Adding a Border Around Images�������������������������������������������������������������������������������������������� 89
Defining the Opacity of an Image������������������������������������������������������������������������������������������ 90
Summary������������������������������������������������������������������������������������������������������������������������������������ 92

Chapter 6: Responding to the User with Buttons and Segmented Controls����������� 93


Running Code in a Button����������������������������������������������������������������������������������������������������������� 96
Storing Code to Run in a User Interface View��������������������������������������������������������������������������� 102
Using a Segmented Control������������������������������������������������������������������������������������������������������ 106
Running Code from a Segmented Control��������������������������������������������������������������������������� 114
Summary���������������������������������������������������������������������������������������������������������������������������������� 120

Chapter 7: Retrieving Text from Text Fields and Text Editors������������������������������� 121
Using Text Fields����������������������������������������������������������������������������������������������������������������������� 121
Defining Expandable Text Fields������������������������������������������������������������������������������������������ 122
Changing the Text Field Style���������������������������������������������������������������������������������������������� 124
Creating Secure Text Fields������������������������������������������������������������������������������������������������� 125
Using Autocorrect and Text Content������������������������������������������������������������������������������������ 126
Defining Different Keyboards���������������������������������������������������������������������������������������������� 128

iv
Table of Contents

Dismissing the Virtual Keyboard������������������������������������������������������������������������������������������ 130


Using a Text Editor��������������������������������������������������������������������������������������������������������������� 132
Summary���������������������������������������������������������������������������������������������������������������������������������� 135

Chapter 8: Limiting Choices with Pickers������������������������������������������������������������ 137


Using a Picker��������������������������������������������������������������������������������������������������������������������������� 137
Displaying Options in a Picker��������������������������������������������������������������������������������������������� 142
Populating a Picker with an Enumeration��������������������������������������������������������������������������� 146
Using the Color Picker��������������������������������������������������������������������������������������������������������������� 149
Using the Date Picker���������������������������������������������������������������������������������������������������������������� 153
Choosing a Date Picker Style���������������������������������������������������������������������������������������������� 154
Displaying a Date and/or Time��������������������������������������������������������������������������������������������� 155
Restricting a Date Range����������������������������������������������������������������������������������������������������� 156
Formatting Dates����������������������������������������������������������������������������������������������������������������� 161
Creating a MultiDate Picker������������������������������������������������������������������������������������������������������ 164
Summary���������������������������������������������������������������������������������������������������������������������������������� 171

Chapter 9: Limiting Choices with Toggles, Steppers, and Sliders������������������������ 173


Using a Toggle��������������������������������������������������������������������������������������������������������������������������� 173
Using a Stepper������������������������������������������������������������������������������������������������������������������������� 176
Defining a Range in a Stepper��������������������������������������������������������������������������������������������� 178
Defining an Increment/Decrement Value in a Stepper�������������������������������������������������������� 179
Using Sliders����������������������������������������������������������������������������������������������������������������������������� 182
Changing the Color of a Slider��������������������������������������������������������������������������������������������� 183
Defining a Range for a Slider����������������������������������������������������������������������������������������������� 183
Defining a Step Increment for a Slider�������������������������������������������������������������������������������� 184
Displaying Minimum and Maximum Labels on a Slider������������������������������������������������������� 184
Summary���������������������������������������������������������������������������������������������������������������������������������� 186

Chapter 10: Providing Options with Links and Menus������������������������������������������ 187


Using Links������������������������������������������������������������������������������������������������������������������������������� 187
Using ShareLinks���������������������������������������������������������������������������������������������������������������������� 188
Customizing a ShareLink����������������������������������������������������������������������������������������������������� 191

v
Table of Contents

Using Menus����������������������������������������������������������������������������������������������������������������������������� 195


Formatting Titles on the Menu and Buttons������������������������������������������������������������������������ 199
Adding a Submenu�������������������������������������������������������������������������������������������������������������� 201
Summary���������������������������������������������������������������������������������������������������������������������������������� 204

Chapter 11: Touch Gestures���������������������������������������������������������������������������������� 205


Detecting Tap Gestures������������������������������������������������������������������������������������������������������������� 205
Detecting Spatial Tap Gestures������������������������������������������������������������������������������������������������� 207
Detecting Long Press Gestures������������������������������������������������������������������������������������������������� 211
Detecting Magnification Gestures��������������������������������������������������������������������������������������������� 214
Detecting Rotation Gestures����������������������������������������������������������������������������������������������������� 219
Detecting Drag Gestures����������������������������������������������������������������������������������������������������������� 223
Defining Priority and Simultaneous Gestures��������������������������������������������������������������������������� 227
Defining a High-Priority Gesture������������������������������������������������������������������������������������������ 230
Defining Simultaneous Gestures����������������������������������������������������������������������������������������� 233
Summary���������������������������������������������������������������������������������������������������������������������������������� 236

Chapter 12: Using Alerts, Action Sheets, and Contextual Menus������������������������� 239
Displaying an Alert/Action Sheet����������������������������������������������������������������������������������������������� 240
Displaying and Responding to Multiple Buttons������������������������������������������������������������������ 243
Making Alert/ActionSheet Buttons Responsive������������������������������������������������������������������� 248
Displaying TextFields in an Alert����������������������������������������������������������������������������������������������� 254
Using Contextual Menus����������������������������������������������������������������������������������������������������������� 258
Summary���������������������������������������������������������������������������������������������������������������������������������� 261

Chapter 13: Displaying Lists��������������������������������������������������������������������������������� 263


Displaying Array Data in a List�������������������������������������������������������������������������������������������������� 266
Displaying Arrays of Structures in a List����������������������������������������������������������������������������������� 268
Creating Groups in a List����������������������������������������������������������������������������������������������������������� 271
Adding Line Separators to a List����������������������������������������������������������������������������������������������� 277
Displaying Alternating Colors to a List�������������������������������������������������������������������������������������� 280
Adding Swipe Gestures to a List����������������������������������������������������������������������������������������������� 284

vi
Table of Contents

Deleting Items from a List��������������������������������������������������������������������������������������������������� 285


Moving Items in a List��������������������������������������������������������������������������������������������������������� 288
Creating Custom Swipe Actions for a List��������������������������������������������������������������������������� 292
Searching a List������������������������������������������������������������������������������������������������������������������������ 298
Summary���������������������������������������������������������������������������������������������������������������������������������� 303

Chapter 14: Using Forms and Group Boxes���������������������������������������������������������� 305


Creating a Simple Form������������������������������������������������������������������������������������������������������������ 306
Dividing a Form into Sections��������������������������������������������������������������������������������������������������� 310
Disabling Views in a Form��������������������������������������������������������������������������������������������������������� 314
Using Group Boxes�������������������������������������������������������������������������������������������������������������������� 317
Summary���������������������������������������������������������������������������������������������������������������������������������� 319

Chapter 15: Using Disclosure Groups, Scroll Views, and Outline Groups������������� 321
Using a Disclosure Group���������������������������������������������������������������������������������������������������������� 322
Using a Scroll View������������������������������������������������������������������������������������������������������������������� 325
Jumping to a Specific Location������������������������������������������������������������������������������������������� 328
Defining a Horizontal Scroll View���������������������������������������������������������������������������������������� 334
Using an Outline Group������������������������������������������������������������������������������������������������������������� 335
Summary���������������������������������������������������������������������������������������������������������������������������������� 340

Chapter 16: Creating Charts��������������������������������������������������������������������������������� 343


Creating a Bar Chart������������������������������������������������������������������������������������������������������������������ 345
Defining Charts with Loops and Arrays������������������������������������������������������������������������������� 348
Defining Colors for a Bar Chart�������������������������������������������������������������������������������������������� 352
Displaying an Average Value with the RuleMark����������������������������������������������������������������� 357
Creating a Stacked Bar Chart���������������������������������������������������������������������������������������������� 361
Creating a Line Chart���������������������������������������������������������������������������������������������������������������� 364
Creating Area Charts����������������������������������������������������������������������������������������������������������������� 368
Creating a Point Chart��������������������������������������������������������������������������������������������������������������� 370
Creating a Rectangle Chart������������������������������������������������������������������������������������������������������� 373
Summary���������������������������������������������������������������������������������������������������������������������������������� 376

vii
Table of Contents

Chapter 17: Using the Navigation Stack��������������������������������������������������������������� 379


Using a Navigation Stack���������������������������������������������������������������������������������������������������������� 380
Adding a Title to a Navigation Stack����������������������������������������������������������������������������������������� 384
Adding Buttons to a Navigation Stack��������������������������������������������������������������������������������������� 387
Displaying Views from a Navigation Stack�������������������������������������������������������������������������������� 394
Passing Data Between Structures in a Navigation Stack���������������������������������������������������� 399
Changing Data Between Structures in a Navigation Stack�������������������������������������������������� 404
Sharing Data Between Structures in a Navigation Stack���������������������������������������������������� 408
Using Lists in a Navigation Stack���������������������������������������������������������������������������������������������� 415
Summary���������������������������������������������������������������������������������������������������������������������������������� 420

Chapter 18: Using the Tab View���������������������������������������������������������������������������� 421


Using a Tab View����������������������������������������������������������������������������������������������������������������������� 422
Selecting Buttons Programmatically in a Tab Bar��������������������������������������������������������������������� 428
Displaying a Page View������������������������������������������������������������������������������������������������������������� 432
Displaying Structures in a Tab View������������������������������������������������������������������������������������������ 436
Passing Data Between Structures in a Tab View����������������������������������������������������������������� 440
Changing Data Between Structures in a Tab View��������������������������������������������������������������� 446
Sharing Data Between Structures in a Tab View����������������������������������������������������������������� 451
Summary���������������������������������������������������������������������������������������������������������������������������������� 457

Chapter 19: Using Grids���������������������������������������������������������������������������������������� 459


Defining Multiple Rows/Columns���������������������������������������������������������������������������������������������� 464
Adjusting Spacing Between Rows/Columns����������������������������������������������������������������������������� 467
Creating Tables Using GridRows����������������������������������������������������������������������������������������������� 471
Summary���������������������������������������������������������������������������������������������������������������������������������� 478

Chapter 20: Using Animation�������������������������������������������������������������������������������� 479


Moving Animation��������������������������������������������������������������������������������������������������������������������� 479
Scaling Animation��������������������������������������������������������������������������������������������������������������������� 484
Rotating Animation�������������������������������������������������������������������������������������������������������������������� 486
Animation Options��������������������������������������������������������������������������������������������������������������������� 488

viii
Table of Contents

Using Delays and Duration in Animation����������������������������������������������������������������������������� 491


Using an Interpolating Spring in Animation������������������������������������������������������������������������� 495
Using withAnimation����������������������������������������������������������������������������������������������������������������� 500
Summary���������������������������������������������������������������������������������������������������������������������������������� 505

Chapter 21: Using GeometryReader���������������������������������������������������������������������� 507


Understanding the GeometryReader����������������������������������������������������������������������������������������� 507
Understanding the Differences Between Global and Local Coordinates����������������������������������� 512
Identifying Minimum, Mid, and Maximum Values of a GeometryReader����������������������������������� 517
Summary���������������������������������������������������������������������������������������������������������������������������������� 520

Appendix: An Introduction to Swift���������������������������������������������������������������������� 521

Index��������������������������������������������������������������������������������������������������������������������� 577

ix
About the Author
Wallace Wang is a former Windows enthusiast who took one look at Vista and realized
that the future of computing belonged to the Mac. He's written more than 40 computer
books, including Microsoft Office for Dummies, Beginning Programming for Dummies,
Steal This Computer Book, Beginning ARKit for iPhone and iPad, and Pro iPhone
Development with SwiftUI. In addition to programming the Mac and iPhone/iPad, he
also performs stand-up comedy, having appeared on A&E’s An Evening at the Improv
and having performed in Las Vegas at the Riviera Comedy Club at the Riviera Hotel and
Casino. When he’s not writing computer books or performing stand-up comedy, he also
enjoys blogging about screenwriting at his site, https://15minutemoviemethod.com,
where he shares screenwriting tips with other aspiring screenwriters who all share the
goal of breaking into Hollywood.

xi
About the Technical Reviewer
Massimo Nardone has more than 22 years of experience
in security, web and mobile development, Cloud, and IT
architecture. His true IT passions are security and Android.
He has been programming and teaching how to program
with Android, Perl, PHP, Java, VB, Python, C/C++, and
MySQL for more than 20 years.
Massimo also holds a Master of Science degree in
computing science from the University of Salerno, Italy.
He has worked as a project manager, software engineer,
research engineer, chief security architect, information
security manager, PCI/SCADA auditor, and senior lead IT security/Cloud/SCADA
architect for many years.
His technical skills include security, Android, Cloud, Java, MySQL, Drupal, Cobol,
Perl, web and mobile development, MongoDB, D3, Joomla, Couchbase, C/C++, WebGL,
Python, Pro Rails, Django CMS, Jekyll, Scratch, etc.
He currently works as Chief Information Security Officer (CISO) for Cargotec Oyj.
He worked as a visiting lecturer and supervisor for exercises at the Networking
Laboratory of the Helsinki University of Technology (Aalto University). He holds four
international patents (PKI, SIP, SAML, and Proxy areas).

xiii
CHAPTER 1

Understanding
iOS Programming
Programming involves writing commands for a computer to follow. In iOS programming,
the computer is either an iPhone or an iPad. To create apps for an iPhone or iPad, you
need to learn three different skills:
• How to write commands in the Swift programming language

• How to use Apple’s software frameworks

• How to create user interfaces in Xcode

You need to write commands in the Swift programming language to make your app
do something unique. Then you rely on Apple’s software frameworks to handle common
tasks such as detecting touch gestures or accessing the camera. Finally, you design your
app’s user interface.
Apple’s software frameworks let you perform common tasks without writing (and
testing) your own Swift code. By relying on Apple’s proven and tested software frameworks,
you can focus solely on the unique features of your app rather than the mundane details of
making an app access different hardware features of an iPhone or iPad.
Ideally, you want your user interface to look good by adapting to all different screen
sizes such as an iPhone or iPad. The user interface lets you display information to the
user and retrieve information from the user. The best user interface is one that doesn’t
require even thinking about.
Essentially, every iOS app consists of three parts as shown in Figure 1-1:
• Your code to make an app do something useful

• A user interface that you can design visually in Xcode

• Access to hardware features of an iOS device through one or more of


Apple’s iOS frameworks
1
© Wallace Wang 2023
W. Wang, Beginning iPhone Development with SwiftUI, https://doi.org/10.1007/978-1-4842-9541-0_1
Chapter 1 Understanding iOS Programming

Figure 1-1. The three parts of an iOS app

Apple provides dozens of frameworks for iOS (and their other operating systems as
well such as macOS, watchOS, and tvOS). By simply using Apple’s frameworks, you can
accomplish common tasks by writing little code of your own. Some of Apple’s available
frameworks include

• SwiftUI – User interface and touch screen support

• ARKit – Augmented reality features

• Core Animation – Displays animation

• GameKit – Creates multiplayer interactive apps

• Contacts – Accesses the Contacts data on an iOS device

• SiriKit – Allows the use of voice commands through Siri

• AVKit – Allows playing of audio and video files

• Media Library – Allows access to images, audio, and video stored on


an iOS device
• CallKit – Provides voice calling features

Apple’s frameworks essentially contain code that you can reuse. This makes apps
more reliable and consistent while also saving developers’ time by using proven code that
works correctly. To see a complete list of Apple’s available software frameworks, visit the
Apple Developer Documentation site (https://developer.apple.com/documentation).
Apple’s frameworks can give you a huge head start in creating an iOS app, but you
still need to provide a user interface so users can interact with your app. While you could
create a user interface from scratch, this would also be tedious, time-consuming, and
error-prone. Even worse, if every app developer created a user interface from scratch, no
two iOS apps would look or work exactly the same, confusing users.

2
Chapter 1 Understanding iOS Programming

That’s why Apple’s Xcode compiler helps you design user interfaces with standard
features used in most apps such as buttons, labels, text fields, and sliders. In Xcode, each
window of a user interface is called a view. While simple iOS apps may consist of a single
view (think of the Calculator app on an iPhone), more sophisticated iOS apps consist of
multiple views.
To create user interfaces, Xcode offers two options:

• Storyboards

• SwiftUI

Storyboards let you design user interfaces visually by placing user interface objects
at specific locations on the screen as shown in Figure 1-2. Unfortunately, using fixed
values to define the position of various objects on a user interface means that storyboard
user interfaces do not adapt easily to different-size iOS device screens or orientations
(portrait or landscape).

Figure 1-2. Storyboards use fixed values to define the arrangement of objects on a
user interface

Since fixed values for arranging objects on a user interface won’t adapt to different
screen sizes, Apple offers a second way to design user interfaces using a framework
called SwiftUI. The main idea behind SwiftUI is that you place objects in the center of the
user interface and define their position relative to the center.

3
Chapter 1 Understanding iOS Programming

When the screen size is large, the distance between user interface objects expands.
When the screen size is small, the distance between user interface objects shrinks, so the
user interface adapts to the screen size automatically as shown in Figure 1-3.

Figure 1-3. SwiftUI user interfaces can adapt to different screen sizes
automatically

You can use storyboards and SwiftUI together in a single project, or you can use
either storyboards or SwiftUI by themselves. Because SwiftUI represents the future for
developing apps for all of Apple’s products, this book focuses exclusively on creating user
interfaces using SwiftUI rather than storyboards.

Learning About Xcode


Learning iOS development is more than just learning how to write code in the Swift
programming language. Besides knowing Swift, you must also know how to find and use
Apple’s different software frameworks, how to use Xcode to design your user interface
using SwiftUI, and how to organize, create, and delete files that contain your Swift code.
In addition, you must also learn how to write code using Xcode’s editor.

4
Chapter 1 Understanding iOS Programming

Each time you create an Xcode project, you’re actually creating a folder that contains
multiple files. A simple iOS app might consist of a handful of files, while a complicated
app might contain hundreds or even thousands of separate files.
By storing code in separate files, you can quickly identify the file that contains the
data you want to edit and modify while safely ignoring other files. No matter how many
files a project may hold, Xcode treats them as if all your Swift code were stored in a single
file. By breaking up your program into multiple files, you can group different parts of
your program in separate files to organize your app.
To further help you organize multiple files in a project, Xcode lets you create
separate folders. These folders exist solely for your convenience in organizing your code.
Figure 1-4 shows how Xcode can divide an app into folders and files.

Figure 1-4. Xcode stores your code in files that you can organize in folders

To get acquainted with iOS app development, let’s start with a simple project that
will teach you

• How to understand the parts of a project


• How to view different files

• How the different parts of Xcode work


1. Start Xcode. A welcoming screen appears that lets you choose a
recently used project or the option of creating a new project as
shown in Figure 1-5. (You can always open this welcoming screen
from within Xcode by choosing Windows ➤ Welcome to Xcode or
by pressing Shift + Command + 1.

5
Chapter 1 Understanding iOS Programming

Figure 1-5. The Xcode welcoming screen

2. Click the Create a new Xcode project option. Xcode displays


templates for designing different types of apps as shown in
Figure 1-6. Notice that the top of the template window displays
different operating systems you can develop apps for such as
iOS, watchOS, tvOS, and macOS. By selecting different operating
systems, you can create projects designed for the devices that run
that particular operating system.

6
Chapter 1 Understanding iOS Programming

Figure 1-6. Choosing a project template

3. Click iOS and then click App. The App template represents the
most basic iOS project.

4. Click the Next button. Another window appears, asking for your
project name along with an organization name and organization
identifier as shown in Figure 1-7. You must fill out all three text
fields, but the project name, organization name, and organization
identifier can be any descriptive text that you want. Notice that the
user interface popup menu lets you choose between SwiftUI and
Storyboard. For every project in this book, always make sure you
choose SwiftUI.

7
Chapter 1 Understanding iOS Programming

Figure 1-7. Defining a project name, organization name, and organization


identifier

5. Click in the Project Name text field and type a name for your
project such as MyFirstApp.

6. Click in the Team text field and type your name or company name.

7. Click in the Organization Identifier text field and type any


identifying text you wish. Typically this identifier is your website
spelled backward such as com.microsoft.

8. Click the Interface popup menu and choose SwiftUI. Make sure
that all checkboxes are clear. Then click the Next button. Xcode
displays a dialog for you to choose which drive and folder to store
your project in.

9. Choose a drive and folder and click the Create button. Xcode
displays your newly created project.

The Xcode window may initially look confusing, but you need to see that Xcode
groups information in several panes. The far-left pane is called the Navigator pane.
By clicking icons at the top of the Navigator pane, you can view different parts of your
project as shown in Figure 1-8.

8
Chapter 1 Understanding iOS Programming

Figure 1-8. The Navigator pane appears on the far left of the Xcode window

The main SwiftUI file is called ContentView, which contains Swift code that defines
the user interface of an app:

import SwiftUI

struct ContentView: View {


    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundColor(.accentColor)
            Text("Hello, world!")
        }
        .padding()
    }
}

struct ContentView_Previews: PreviewProvider {


    static var previews: some View {
        ContentView()
    }
}

The import SwiftUI line lets your app use the SwiftUI framework for designing user
interfaces.

9
Chapter 1 Understanding iOS Programming

The ContentView: View structure displays a single view on the screen. SwiftUI can
only display one view at a time on the screen. When you create a SwiftUI iOS app, the
default view is a vertical stack (VStack) that contains an Image view and a Text view.
The Image view displays a globe icon, and the Text view displays “Hello, world!” on
the screen.
The ContentView_Previews: PreviewProvider structure actually displays the user
interface in the Canvas pane, which appears to the right of the Swift code as shown in
Figure 1-9.

Figure 1-9. The Editor pane and the Canvas pane

When the Editor pane and the Canvas pane appear side by side, any changes you
make to the Editor pane appear in the Canvas pane and vice versa. If you click the Editor
Options icon in the upper-right corner, you can hide or display the Canvas pane as
shown in Figure 1-10.

10
Chapter 1 Understanding iOS Programming

Figure 1-10. The Editor Options icon lets you toggle between displaying and
hiding the Canvas pane

The Canvas pane serves two purposes. First, it lets you see exactly what your user
interface looks like on a simulated iOS device. Besides letting you switch between
different simulated iOS devices (such as between different iPhone or iPad models),
the Canvas pane also lets you select different settings such as light or dark mode and
dynamic type. Changing iOS settings lets you see how your user interface might look
under different appearance options.

Switching Between iOS Devices


The Canvas pane emulates a single iOS device such as an iPhone 14 Pro or an iPad Mini.
That way you can see how your user interface adapts to the screen sizes of different iOS
devices. To make the Canvas pane emulate a different iOS device, follow these steps:

1. Click the name of the currently displayed iOS device at the top
of the Xcode window. A list of different iOS devices appears as
shown in Figure 1-11.

11
Chapter 1 Understanding iOS Programming

Figure 1-11. The list of iOS devices the Canvas pane can emulate

2. Click the iOS device you want to appear in the Canvas pane.
Xcode offers a second way to change the iOS device emulation in the Canvas pane by
using the Inspector pane. Follow these steps:

1. Move the cursor in ContentView() inside the ContentView_


Previews: PreviewProvider structure. The Inspector pane appears.

2. Click the Device popup menu and choose an iOS device to appear
in the Canvas pane as shown in Figure 1-12.

12
Chapter 1 Understanding iOS Programming

Figure 1-12. The Device popup menu can select iOS devices in the Inspector pane

After you choose a different iOS device for the Canvas pane, you can change the
magnification of the Canvas pane by clicking different icons that appear in the bottom-­
right corner of the Canvas pane as shown in Figure 1-13:

• Zoom Out – Shrinks the size of the iOS device

• Zoom to 100% – Displays the iOS device in its actual size (may cut off
parts of the iOS device, especially when emulating an iPad or larger
iPhone model)

• Zoom to Fit – Makes the entire iOS device visible


• Zoom In – Expands the size of the iOS device

Figure 1-13. The Zoom icons let you change the magnification of the Canvas pane

13
Chapter 1 Understanding iOS Programming

The Zoom to 100% lets you see your user interface on the actual size of the emulated
iOS device, while the Zoom to Fit lets you see the entire emulated iOS device as shown
in Figure 1-14. Then you can use the Zoom Out and Zoom In options to adjust the size of
the iOS device to your liking.

Figure 1-14. Comparing Zoom to 100% and Zoom to Fit

Changing the iOS Device Emulation Appearance


Once you’ve selected an iOS device to emulate in the Canvas pane, you can customize
three additional ways to change the appearance of your user interface:

• Color Scheme – Displays either light or dark mode

• Orientation – Displays either portrait or landscape mode

• Dynamic Type – Changes the size of text

14
Chapter 1 Understanding iOS Programming

To change the appearance of the iOS device emulation in the Canvas pane, follow
these steps:

1. Click the Device Settings icon near the bottom of the Canvas pane.
A popup window appears as shown in Figure 1-15.

Figure 1-15. The Device Settings window

2. Click the on/off switch to the right of the setting you want to
change such as Color Scheme or Orientation.

3. Click an option to change the iOS device appearance, or drag the


slider to change the size of text under the Dynamic Type option.

15
Chapter 1 Understanding iOS Programming

If you want to compare different options side by side, follow these steps:

1. Click the Variants icon at the bottom of the Canvas pane. A popup
menu appears as shown in Figure 1-16.

Figure 1-16. The Variants popup menu

2. Choose an option such as Color Scheme Variants or Dynamic


Type Variants. Xcode displays all the different options at once as
shown in Figure 1-17.

Figure 1-17. The Orientation Variants displayed

3. Click the Live icon to view the iOS device back in the Canvas pane
again as shown in Figure 1-18.

Figure 1-18. The Live icon

16
Chapter 1 Understanding iOS Programming

Selecting User Interface Objects


Once you’ve placed objects on the user interface, you can only select them by moving
the cursor in the Swift code for that object. If you would rather click objects on the user
interface using the mouse, you must click the Selectable icon near the bottom of the
Canvas pane as shown in Figure 1-19.

Figure 1-19. The Selectable icon

Once you click the Selectable icon and click an object on the user interface, blue
borders appear around that object. These blue borders let you see the size of that object.
This can be handy for seeing how large an object’s background appears if you add a
background color.
The Live icon (see Figure 1-18) lets you interact with your user interface to test your
app. The Selectable icon makes it easy to edit your user interface.

Manipulating the Xcode Panes


The four Xcode panes (Navigator, Editor, Canvas, and Inspector) serve different purposes.
The Navigator pane displays information about your project such as the names of all
the files that make up that project. The Editor pane is where you can write and edit Swift
code. The Canvas pane is where you can see and test the user interface defined by your
Swift code. The Inspector pane displays information about the currently selected object.

17
Chapter 1 Understanding iOS Programming

You can resize any of the panes by moving the mouse pointer over the pane border
and dragging the mouse left or right. If you want, you can toggle between hiding and
displaying the Navigator and the Inspector pane. That way you can see more of the
Editor and Canvas panes.
To hide/display the Navigator or Inspector pane, you have two options as shown in
Figure 1-20:

• Choose View ➤ Navigators/Inspectors ➤ Hide/Show Navigator/


Inspector.

• Click the Show/Hide Navigator/Inspector pane icons.

Figure 1-20. Hiding or showing the Navigator and Inspector panes

The Navigator pane lets you select options to display in the Editor pane. The
Inspector pane lets you select user interface items to choose different ways to modify
them as shown in Figure 1-21.

18
Chapter 1 Understanding iOS Programming

Figure 1-21. The Inspector pane lists different ways to modify a selected item

To see how the Inspector pane works, follow these steps:

1. Create a new iOS App project and then click the ContentView file
in the Navigator pane. The Editor pane displays the contents of the
ContentView file.

2. Move the cursor in the Text(“Hello, world!”) line.

3. Click the Attributes Inspector icon in the Inspector pane as shown


in Figure 1-22. The Inspector pane displays additional ways to
modify the currently selected item.

19
Chapter 1 Understanding iOS Programming

Figure 1-22. The Attributes Inspector icon lets you view additional ways to modify
an item in the Inspector pane

As you can see, Xcode’s panes show different information about a project. The
Navigator pane (on the far left) lets you see an overview of your project. Clicking specific
items in the Navigator pane displays that item in the Editor pane. The Inspector pane (on
the far right) shows additional information about something selected in the Editor pane.
The Canvas pane lets you preview the appearance of your user interface.
If you explore Xcode, you’ll see dozens of features, but it’s not necessary to
understand everything at once to start using Xcode. Just focus on using only those
features you need and feel free to ignore the rest until you need them.

20
Chapter 1 Understanding iOS Programming

Summary
Creating iOS apps involves more than just writing code. To help your app access
hardware features of different iOS devices, you can use Apple’s software frameworks
that provide access to the camera or to the address book of an iOS device. The most
important framework that all SwiftUI projects use is the SwiftUI framework. By
combining your code with Apple’s existing software frameworks, you can focus on
writing code to make your app work and use Apple’s software frameworks to help you
perform common functions found on most iOS devices.
Besides writing code, every iOS app also needs a user interface. To create user
interfaces, use SwiftUI. Since SwiftUI makes it easy to create user interfaces that adapt to
different devices, SwiftUI is fast becoming the preferred way to design user interfaces for
apps on all of Apple’s platforms (macOS, iOS, iPadOS, watchOS, and tvOS).
The main tool for creating iOS apps is Apple’s free Xcode program, which lets you
create projects, organize the separate files of a project, and view and edit the contents of
each file. Xcode lets you design, edit, and test your app all in a single program. Although
Xcode offers dozens of features, you only need to use a handful of them to start creating
iOS apps of your own.
Learning iOS programming involves learning how to write commands using the
Swift programming language, learning how to find and use Apple’s various software
frameworks, learning how to design user interfaces in SwiftUI, and learning how to use
Xcode. While this might seem like a lot, this book will take you through each step of
the way so you’ll feel comfortable using Xcode and creating your own iOS apps in the
near future.

21
CHAPTER 2

Designing User Interfaces


with SwiftUI
Every app needs a user interface. The basic idea behind SwiftUI is to create a user
interface using building blocks known as “views.” A view displays a single item on the
user interface such as text, an image, or a button as shown in Figure 2-1.

Figure 2-1. The parts of a SwiftUI user interface

One limitation of SwiftUI is that it can only display a single view on the screen at a
time. To get around this limitation, SwiftUI offers something called “stacks.” A stack is
considered a single view but lets you combine or stack up to ten additional views. By
creating a stack, you can display more than one view on the screen. Stacks can even hold
other stacks, essentially letting you display as many views as you want on a single screen.

23
© Wallace Wang 2023
W. Wang, Beginning iPhone Development with SwiftUI, https://doi.org/10.1007/978-1-4842-9541-0_2
Chapter 2 Designing User Interfaces with SwiftUI

There are three types of stacks as shown in Figure 2-2:

• VStack – Vertical stacks that arrange views above and below


another view

• HStack – Horizontal stacks that arrange views side by side

• ZStack – A stack that overlays views directly over each other

Figure 2-2. Vertical, horizontal, and ZStacks

A stack counts as a single view. By using horizontal (HStack) or vertical (VStack)


stacks, you can add up to ten (10) views inside a stack. For greater flexibility, you can
embed stacks inside of stacks to display as many views as necessary.

Note A stack can only contain a maximum of ten (10) views. If you try to store 11
or more views inside of a stack, Xcode will display an error message and refuse to
run your program.

When creating a user interface in SwiftUI, you have three options:

• Type Swift code in the Editor pane.


• Drag and drop a view (such as a button) into your Swift code in the
Editor pane.

• Drag and drop a view (such as a button) into the Canvas pane.

24
Chapter 2 Designing User Interfaces with SwiftUI

Typing Swift code in the Editor pane to design a user interface is the fastest and most
flexible method, but takes time and requires familiarity with different options. To make
typing Swift code to define user interface views easier, Xcode displays a popup menu
of options when it recognizes what you’re trying to type. By choosing an option and
pressing Return, you can create a user interface view quickly as shown in Figure 2-3.

Figure 2-3. As you type Swift code to define a user interface view, Xcode displays a
menu of options

If you’re not familiar with your options for designing a user interface, it’s easier to use
the Library window, which lists all possible user interface views you can use as shown in
Figure 2-4.

25
Chapter 2 Designing User Interfaces with SwiftUI

Figure 2-4. Clicking the Library icon opens the Library window

Once you open the Library window, you can either

• Drag and drop a user interface view from the Library window into the
Editor pane as shown in Figure 2-5.

• Click the Selectable icon and then drag and drop a user interface
view onto the simulated iOS device user interface in the Canvas pane
as shown in Figure 2-6.

26
Chapter 2 Designing User Interfaces with SwiftUI

Figure 2-5. Drag and drop a user interface view into the Editor pane

Figure 2-6. Drag and drop a user interface view into the Canvas pane

27
Chapter 2 Designing User Interfaces with SwiftUI

No matter how you change the user interface, Xcode keeps all changes synchronized
between the Editor pane and the Canvas pane. That means when you type Swift code in
the Editor pane, the Canvas pane shows your changes right away. When you drag and
drop a user interface view into the Canvas pane, Xcode automatically adds that Swift
code in the Editor pane right away.
The Canvas pane displays your user interface, but if you want to test your app, you
have two choices as shown in Figure 2-7:

• Click the Run button or choose Product ➤ Run to open the Simulator.

• Click the Live icon at the bottom of the Canvas pane.

Figure 2-7. The Run button and the Live Preview icon

To see how SwiftUI works to create a simple user interface that can respond to the
user, follow these steps:

1. Create a new iOS App project, make sure the interface is SwiftUI,
and give it a descriptive name (such as SwiftExample).

2. Click the ContentView file in the Navigator pane. The Editor pane
displays the contents of the ContentView file.

28
Chapter 2 Designing User Interfaces with SwiftUI

3. Choose Editor ➤ Canvas. (Skip this step if a check mark already


appears in front of the Canvas option.) This opens the canvas so
you can preview your user interface.

4. Delete the text “Hello, world!” in the Text command and type the
following so the ContentView structure looks like this:

struct ContentView: View {


    @State private var message = true
    var body: some View {
        VStack {
            Toggle(isOn: $message) {
                Text("Toggle message on/off")
            }

            if message {
                Text ("Here's a secret message!")
            }
        }
    }
}

The preceding Swift code displays a toggle switch on the screen,


but you won’t be able to see it work unless you run your app in the
Simulator (which mimics an iOS device such as an iPhone or iPad)
or test it by clicking the Live icon. In most cases, the Live icon offers a
faster way to view and test your user interface in the Canvas pane.

5. Click the Live icon to turn on Live Preview. As you click the toggle,
notice that the message appears and disappears as shown in Figure 2-8.

Figure 2-8. Live Preview lets you interact with the user interface in the
Canvas pane

6. Click the Live icon again to turn off Live Preview.

29
Random documents with unrelated
content Scribd suggests to you:
— Comme je suis content de vous voir ! dit-il en prenant mes
deux mains.
Et ce contentement d’abord, évident et vif, l’empêcha de
remarquer que j’étais seule. Il s’en aperçut brusquement, et tout
confus de sa distraction, rougit et s’embarrassa si bien dans ses
excuses que nous nous mîmes à rire tous les deux. J’expliquai
ensuite, selon les instructions de Fabien, que mon mari était malade,
point gravement, assez toutefois pour n’avoir pu m’accompagner, ce
dont il se désolait. Et nous suivîmes vers la maison l’allée où les
châtaigniers et les acacias gardaient assez de feuilles encore pour
mettre sur la poussière une ombre dansante.
Il y eut à ce moment entre Philippe Fabréjol et moi un petit
silence, et nous dûmes l’un et l’autre l’occuper de la même façon,
car en même temps il me demanda :
— Ces beaux voyages dont vous rêviez, madame, avez-vous pu
les faire ?
Et je lui dis :
— Ce pavillon de la Reine, l’a-t-on bien élevé, comme vous le
souhaitiez, avec son toit en dôme et ses petites sculptures ?
Le souvenir de l’heure charmante qui nous avait un jour réunis
prenait de singulières et vives précisions. Chacun de nous avait
conservé dans sa mémoire toutes les paroles. Il se souvenait de
mes petits rêves, je n’avais pas oublié ses beaux projets ; et, dans le
temps que nous mîmes à atteindre la maison, nous avions repris
notre causerie au point même où il nous avait fallu l’abandonner trois
ans auparavant.

… Je me rappelle l’entrée dans cette grande maison, aux


fenêtres larges ouvertes, et que tant d’arbres pressés autour d’elle et
chargés d’un or magnifique semblaient pénétrer de leur
rayonnement. Le salon, avec ses meubles provençaux et les
verdures bleuâtres qui tapissaient sa haute muraille, était tout rempli
de souriants visages. M. Fabréjol et sa sœur Philomène, également
enjoués sous leurs lourds cheveux blancs ; un couple de leurs amis,
les Meynadier, vieux ménage dont quarante ans d’union n’avaient
point épuisé la visible tendresse ; et jusqu’à Mme Fabréjol, peinte à
trente ans, éclatante et jolie au-dessus des fleurs que l’on
renouvelait chaque jour devant son portrait, me firent un de ces
accueils par lesquels, soudain, tout le cœur s’épanouit. Une gaîté
paisible et profonde, telle que je n’en avais jamais connue, flottait
dans cette pièce. Elle m’enveloppa aussitôt. — Elle me pénétra
mieux ensuite durant le repas joyeux, dans la claire salle à manger
que parfumaient les dernières roses. Et c’était comme un vin doux et
sournois dont l’ivresse engourdit avant que l’on ait songé à la
redouter. M. Fabréjol parlait de ses beaux domaines dans l’Algérie
éblouissante et nous conviait tous à l’y aller voir. Les Meynadier,
racontant les changements opérés dans leur petite propriété, leur
dernier voyage à Paris, leurs projets pour l’hiver, ne pouvaient
prononcer une parole qui n’évoquât leur vieux et profond bonheur.
Philippe, assis près de moi, me disait quelquefois : « Vous rappelez-
vous ? » comme si beaucoup de jours et de mois, — au lieu d’une
heure seulement, — avaient formé nos communs souvenirs. — Et
toute la peine de mon cœur s’en était allée je ne sais où.
Elle se cachait plus loin encore, tandis que Philippe Fabréjol, un
peu plus tard, laissant sa tante et leurs hôtes se reposer au salon,
m’emmenait voir au fond du vallon le pavillon de la Reine. M.
Fabréjol devait nous accompagner, mais un de ses fermiers vint
pour lui parler. Nous l’attendîmes quelques instants, puis Philippe
décida qu’il nous rejoindrait là-bas, et nous allions maintenant tous
les deux à travers le jardin roux et vert qui sentait à la fois l’été
mourant et le délicieux automne.

Le chemin descendait entre des troènes et des buis. De trois


grands réservoirs qui servaient à l’irrigation du verger, l’eau fuyait à
petit bruit vers le profond ruisseau. Philippe Fabréjol m’expliquait
que son père avait fait construire ces réservoirs à l’exemple de ceux
qui valaient à leurs terres d’Algérie tant d’abondance et de fécondité.
Il me parlait des champs, des vignes et des jardins, et me racontait
leur libre vie, là-bas, les courses à cheval, les soirées lumineuses
devant la maison blanche, la mer que l’on aperçoit au loin, toute
petite, pierre précieuse, émail limpide, triangle d’argent bleu ou d’or
verdâtre étincelant entre deux collines. Nous avions quitté le chemin
et, sur cette pente humide où nous marchions, l’herbe épaisse, fine
et très verte, était douce à nos pas.
Elle se continuait ainsi jusqu’au fond du vallon et le pavillon de la
Reine était au milieu de ce beau tapis. Je ne pense revoir rien de
plus charmant que ce petit temple dont six colonnettes ornées de
cannelures et de feuillages portaient légèrement la ronde coupole.
Des rosiers tout chargés de leur floraison d’automne passaient leurs
branches entre ces colonnes, et les pétales trop mûrs tachaient de
safran et de carmin le banc de marbre étroit et poli qui s’incurvait à
l’intérieur. Philippe m’y fit asseoir après que j’eus bien tourné tout
autour du léger édifice, dans un ravissement puéril et profond ; et
laissant alors paraître dans ses yeux bleus une sympathie plus
grave soudain et plus attentive :
— Maintenant, me dit-il, parlons un peu de vous, si vous le
voulez bien.
Mais quelque douceur que me fît connaître son regard, il m’était
plus doux encore en ce moment d’oublier cette créature tourmentée
sur laquelle il m’interrogeait, et je ne permettais pas que l’on me
ramenât vers elle.
— Non… non… dis-je un peu trop vite et secouant la tête, je ne
veux pas.
— Pourquoi donc ?
Je me tus. Et c’était là peut-être la plus dangereuse confidence.
Philippe Fabréjol n’osa pas me regarder davantage. Mais ayant un
long moment réfléchi :
— Vous ne devez pas, murmura-t-il, être très heureuse.
François Landargues, un jour, m’avait dit la même phrase.
Hélas !… pouvais-je désormais, pour le comparer à un autre et pour
le détester mieux encore, me rappeler François Landargues ?… Et
tout éperdue d’être ainsi tirée malgré moi vers ce que je ne voulais
pas revoir :
— Je ne sais pas… Je ne sais pas… Ne parlons pas de cela.
Il répéta pensivement :
— Et pourquoi donc ?
Puis aussitôt, confus de cette insistance :
— Pardonnez-moi. Nous nous sommes vus avant aujourd’hui
une fois seulement. Nous ne nous connaissons pas. Et cependant…
il faut que je vous le dise et ce sera mon excuse… souvent, là-bas,
par ces beaux soirs dont je vous parlais, à l’heure du repos sur la
terrasse d’où l’on voit la mer, il me semblait être en France, dans
une ville… une très petite ville, avec de petites rues serrées,
farouches, ennuyeuses… J’entrais dans un salon un peu sombre…
un peu triste… Et je revoyais là une femme… une jeune femme…
Souvent, oui… cela m’est arrivé très souvent… C’est singulier, n’est-
ce pas ?… Le souvenir !… Et nous nous étions vus si brièvement !…
Nous n’avions dit que de simples paroles… Mais c’est à cause de
cela, comprenez-vous, que je me suis permis de vous demander…
Il ne répéta plus cette demande, mais il m’en fit une autre, après
un silence :
— Nous allons bientôt repartir. Me permettrez-vous d’aller vous
dire adieu ? Mon père m’a dit, je crois, que vous logiez dans la rue
des Trois-Faucons.
Cette fois encore, puisque dans mon misérable état on ne
pouvait rien me dire qui ne rappelât mon angoisse, j’allais répondre :
« Non, il ne faut pas ! » parce que j’imaginais Fabien, et sa
sauvagerie, et toutes ces blessures qu’il recevrait, lui aussi, des
moindres paroles… Mais la voix de M. Fabréjol, forte et joyeuse, cria
tout près de nous :
— Vous vous êtes installés dans le pavillon : voulez-vous,
madame, y tenir la cour d’amour pour les roses et les grenadiers ?
Nous retournâmes avec lui vers la maison. Et un peu plus tard,
comme la nuit vient vite en automne, il fallut se séparer. Les
Meynadier, dont la propriété était voisine, s’en allèrent à pied, un peu
lourds, un peu lents, mais se tenant par le bras et se penchant l’un
vers l’autre. On tira mon cocher de l’office et mon cheval de l’écurie,
et le grinçant équipage me remporta sur les chemins. Ils étaient
clairs encore, mais commencèrent bientôt de s’assombrir. Et la
grande douceur qui demeurait autour de moi et dans laquelle je
continuais de vouloir tout oublier se dissipa peu à peu à mesure que
je m’éloignais de la maison heureuse. En vain je m’efforçais de la
retenir. Quand je cessai de voir, en me retournant, l’ombre plus
profonde du vallon entre les collines crépusculaires, je fermai les
yeux… et je ne me défendis pas de retourner dans le pavillon de la
Reine. J’y étais encore quand les pavés d’Avignon commencèrent
de me secouer durement, et je m’obstinais sans doute à n’en pas
bouger, tandis qu’ayant quitté ma voiture sur la place, distraite et
lente, je gagnais à pied la rue des Trois-Faucons. Elle est peu
passagère et mal éclairée. La maison me parut sombre et l’escalier
presque effrayant. J’ouvris la porte et ne vis rien d’abord qu’une
ombre plus profonde. « Sans doute, pensai-je, Fabien n’est pas
encore rentré. » Mais aussitôt je distinguai sa silhouette immobile
dans le cadre de la fenêtre ouverte.
— Eh bien ? me demanda-t-il d’une voix morne.
J’interrogeai à mon tour, avant de lui répondre :
— Tu es sorti aujourd’hui ?
— Non.
— Qu’est-ce que tu as fait ?
— Rien.
… Tout le jour, dans cette chambre, une âme douloureuse, seule
en face du plus abominable souvenir, l’avait subi en gémissant,
s’était soulevée, débattue et se repliant sur son mal pour essayer de
l’étouffer, n’avait pu que s’en pénétrer davantage. Et il n’était besoin
pour connaître cela d’avoir entendu aucune confidence. Comme on
sentait le bonheur en entrant dans le salon des Fabréjol, on respirait
ici l’odeur de l’angoisse. Elle venait à moi ; elle me pénétrait ; elle
m’étourdissait comme un mauvais vin dont on voudrait se détourner
et qui vous impose cependant ses malsaines vapeurs. Comme il
avait souffert aujourd’hui, et comme pendant ce temps j’étais loin de
lui !… Ah ! plus loin, n’est-ce pas ? que la maison des Fabréjol, plus
loin que le royaume des Baux, dont je m’étais plu à entendre parler,
plus loin encore que ce pays d’Alger… loin… plus loin. Et tout en
allumant la lampe, en préparant la table, en essayant de rendre à la
morne chambre un peu de vie, j’éprouvais le besoin de dire :
« Pardonne-moi ! »

*
* *

Je ne devais pas oublier la tristesse de ce retour après la douce


journée. Une fois de plus, le remords de ma négligence me secoua
et me fut salutaire. Il réveilla en moi les forces attentives. Il me
soutint sur ce chemin difficile que je voulais bien suivre, mais où je
défaillais trop souvent. Et je m’appliquai avec plus de soin à mériter
qu’un jour me fût fait l’aveu terrible qui seul pouvait être le
commencement du salut.
L’animation fébrile qu’avait donnée à Fabien la rencontre de M.
Fabréjol l’avait laissé, en se dissipant, plus abattu. Il ne m’avait posé
que de vagues questions sur ma journée à Pampérigouste, et,
pendant ce long dimanche où il n’avait pu regarder que lui-même,
son intérêt avait bien réellement fini de se détacher de tout. Mais il
semblait maintenant trouver près de moi le peu de contentement
qu’il put connaître encore.
Nos promenades communes étaient devenues pour lui une
habitude. Il s’impatientait si je ne pouvais l’accompagner ; quand je
lui parlais un peu longuement, il me laissait dire, sans m’interrompre
aussitôt et sans hausser les épaules. Le matin, quelquefois, il
préférait ne pas sortir et tandis que j’aidais notre servante à mettre
les deux pièces en ordre, il restait là, inactif et ne me quittant guère
des yeux. Il remarqua une fois :
— Tu te fatigues.
Un autre jour, étant sorti, il rentra presque animé et me montrant
deux livres épais dont la tranche avait été noircie par la poussière et
la couverture bleue jaunie par le soleil :
— Tu vois, dit-il, j’ai suivi ton conseil, je les ai trouvés chez
Roumanille. Un peu défraîchis, mais à moitié prix. Ils traitent des
antiquités de la région et principalement, figure-toi, des médailles et
des poteries.
Et je fus touchée qu’il répétât :
— J’ai suivi ton conseil.
Ce conseil, donné les premiers jours et si mal accueilli, j’avais
osé le rappeler la veille, et Fabien l’avait entendu sans colère. La
lecture désormais occupa chaque jour une ou deux de ses heures. Il
voulait s’y intéresser, prenait même quelques notes, ébauchait ce
fameux article que l’on imprimerait à Privas. Et certes, bien souvent,
il rejetait le livre, écrasait nerveusement sa plume sur le papier,
s’accoudait à la table sans plus rien vouloir faire. Mais cet effort, ce
commencement d’effort, me donnait la même joie que j’avais
ressentie de sa bonne intention, le jour qu’il était retourné pour voir
le bohémien blessé. Et la qualité de cette joie était telle que tout mon
cœur s’enrichissait à la recevoir.
Je ne sentais plus devant Fabien cette espèce de gêne qui
m’empêchait de bien savoir quelles paroles il était bon de prononcer.
Elles me venaient maintenant en abondance ; et lui-même ne me
répondait plus sur ce ton bref et lassé qui coupait si promptement
tous nos entretiens. Je continuais à ne lui rien dire de Lagarde, de
notre vie passée, ni de lui-même. Je savais qu’il ne l’aurait pas
permis encore. J’essayais, au delà de nous, au-dessus de nous,
d’atteindre malgré mon ignorance à de petites idées. Il acceptait de
les considérer avec moi, il en discutait quelquefois. Rien ne lui était
bon que ma présence. Rien ne m’était meilleur que cet humble
besoin qu’il avait de moi. Et tout isolés, avec notre grande douleur,
dans cet Avignon tumultueux, éclatant, dont la joie depuis tant de
siècles fait sonner son carillon à travers la Provence, de jour en jour,
d’une façon inconsciente et profonde, nous nous rapprochions l’un
de l’autre.
Cependant, je n’avais pas oublié la maison des Fabréjol et
malgré ce grand remords, le soir de mon retour, il m’advenait encore
de m’y retrouver. Ma tâche, soudain, m’apparaissait vaine et trop
difficile. Mes épaules pliaient sous le poids trop lourd, mes mains
lâchaient prise. Je glissais dans l’herbe molle d’un vallon où toutes
les roses du printemps avaient mis leur bonne odeur ; et je serrais
longuement mes paupières sur mes yeux qu’avait trop profondément
pénétrés le regard de deux yeux bleus.
… Ces yeux étaient près de moi, et je respirais ces roses, un jour
que, me trouvant seule rue des Trois-Faucons, j’entendis sur la
vieille porte retentir le marteau aux serpents entrelacés. Ce n’était
pas Fabien, ce n’était pas Chayère, qui frappait ainsi. Ils avaient leur
clef l’un et l’autre et je ne pensai pas un instant que l’un ou l’autre
pouvait l’avoir oubliée. Je me levai. Je courus à mon miroir. J’étais
tout hésitante et ne savais que faire. Et puis je descendis lentement
l’escalier, et je n’avais pas besoin que la porte fût ouverte pour
apprendre qui était là.
— Bonjour, madame, dit Philippe Fabréjol de sa belle voix
cordiale.
— Bonjour, monsieur.
Je ne le priai pas d’entrer tout de suite… Je savais bien que
c’était lui. Je le savais. Mais à présent seulement j’en éprouvais la
brusque surprise. Je murmurai :
— Vous êtes venu ?…
— Oui, répondit-il, comme je vous l’avais annoncé, pour vous
faire mes adieux…
Il regardait ma coiffure un peu défaite, mes manches courtes,
mon petit tablier de percale festonnée à carreaux gris ; et ce regard
était tel que je n’éprouvais, d’être aussi mal mise, aucune confusion.
— Vous partez déjà !
— Peut-être… Je vais vous raconter.
Et il demanda :
— Votre mari est là ?
— Non.
— Je le pensais bien.
— Qui pouvait vous faire supposer ?…
— Le Dieu excellent qui, deux fois déjà dans ma vie, a pris ses
précautions pour que je puisse tranquillement causer avec vous.
Sans attendre mon invitation, il franchit le seuil de la maison. Il y
avait dans le vestibule trois horloges, deux grands coffres
superposés, et quatre bois de fauteuil sans tenture ni rembourrage.
— Que c’est amusant ! dit Philippe Fabréjol.
— Nous logeons là-haut…
Mais discret, imaginant bien ce que pouvait être ce logement de
fortune, il dit aussitôt :
— Vous allez me recevoir ici, dans un de vos salons. Les
meubles n’y manquent pas.
Les fenêtres, ce matin, avaient été entr’ouvertes par les soins de
Chayère. Un soleil verdâtre qui, pour descendre jusqu’ici, devait
glisser sur les lierres noirs et les sombres lauriers du jardin,
s’allongeait à travers les pièces dont toutes les portes avaient été
enlevées pour laisser aux plus grands meubles un libre passage.
Malgré ce soleil, on respirait, comme dans les églises, l’odeur du
dallage humide et de la cire. Philippe Fabréjol me suivit dans ce qui
avait dû être la salle à manger. Autour d’un grand retable dont
rougissaient les dorures, et en face de lui à l’autre bout de la salle,
de vieilles glaces pendues aux murs et se reflétant l’une l’autre,
tachetées, troubles, étroites et hautes, ou toutes petites dans leur
cadre de bois sombre, multipliaient d’une façon confuse et infinie le
singulier désordre et l’encombrement de la pièce, sa pâle lumière, et
Philippe auprès de moi. Nous pûmes nous asseoir dans de grands
fauteuils, pas trop poussiéreux, venus d’Italie depuis quelque trois
cents ans et dont le cuir déchiré était retenu encore par de larges
clous rouillés et plats. S’égayant d’abord de tout regarder autour de
lui, mon compagnon me déclara qu’il y avait là quelques pièces
assez belles et qu’il irait voir ce Chayère à son magasin. Il m’en
demanda l’adresse. Je la lui donnai. Et nous nous attardions à parler
de ces meubles et de cet homme… Enfin, Philippe ne sut plus que
dire là-dessus. Je me tus aussi. Mais, presque aussitôt, je lui
redemandai :
— Vous allez donc partir ?…
Il répéta :
— Peut-être.
Et avec son regard grave de l’autre jour, quand nous étions assis
dans le pavillon :
— Ce n’est pas encore très sûr. Je crois que j’ai pris ce prétexte
pour ne point tarder davantage à vous rendre ma visite. J’avais peur
que vous ne retourniez à Lagarde et de ne plus vous revoir. Il faut
me pardonner.
— Je vous pardonne.
Et je me mis à rire, voulant lui prouver que je n’attachais à tout
cela qu’une petite importance. Mais mon rire était si vibrant qu’il
m’étonna moi-même. Ce n’était pas un rire de mondains
plaisanterie, mais un rire véritable, un rire de bonheur. Et ce rire ne
me semblait point soulevé par ces paroles : « Il faut me pardonner »,
mais par ces autres paroles dites à propos du prochain départ : « Ce
n’est pas encore tout à fait sûr… »
— Merci ! dit Philippe. Oui, voyez-vous, j’ai voulu venir, je suis
venu…
Il était un peu gêné, car il ne savait exprimer sa pensée qu’avec
franchise.
— L’autre jour, dit-il enfin, après avoir un peu cherché ses
paroles, j’ai aimé ma journée.
Il ne précisait pas quel était ce jour-là, et je pouvais, me sembla-
t-il, n’avoir pas très bien compris.
— Mais vous devez souvent aimer vos journées. Elles sont
heureuses.
Il reconnut :
— Sans doute.
Et, sérieux comme il savait l’être quand il réfléchissait
profondément :
— Cependant…
Soudain, ce fut comme l’autre matin, tandis que nous arrivions à
la porte de sa maison : la gêne tomba. Je cessai d’être contrainte et
lui d’être hésitant… et dans la seconde qui passa avant qu’il
poursuivît sa phrase, nous nous étions retrouvés.
— Que penseriez-vous de quelqu’un qui serait tout à fait heureux
simplement parce qu’il se porte bien et gagne beaucoup d’argent ?
— Vous n’êtes pas heureux seulement pour cela. Votre vie est
utile à beaucoup de gens que vous employez, à la France que vous
enrichissez. Et puis, cette campagne dont vous me parliez, ces
matins dans la montagne, ces grandes courses, ces soirs
lumineux… Vivre dans un beau pays et en goûter, comme vous le
faites, toute la beauté, c’est une raison d’être heureux qui ne me
paraît pas méprisable.
— C’est une des meilleures, mais autre chose encore est
nécessaire.
— Cette autre chose, vous devez l’avoir aussi, comme le reste.
J’entendais bien qu’il voulait parler de l’amour ; mais tandis que
j’imaginais, avec un peu de mélancolie, une femme très belle et qui
l’aimait passionnément, il me répondit :
— J’ai cru l’avoir, mais c’est le plus difficile et je m’étais trompé.
Il prononça ces derniers mots très simplement, très sincèrement
aussi, et il me parut que, si quelconques fussent-ils, il ne les aurait
pas dits à tout le monde. Il continua :
— On se trompe souvent… Je pensais même, — je crois que
j’avais le droit de penser, — on se trompe toujours. Mais je crois
aussi maintenant que je n’ai plus ce droit. Dans mon jugement sur
quelqu’un que je connais cependant bien peu, bien mal, je crois que
je ne me trompe pas… Vous me regardez… Vous m’avez compris.
Je ne cherche pas d’ailleurs à vous parler par sous-entendus. J’y
serais plus maladroit encore que dans ma franchise, et ce n’est pas
peu dire… Madame, ne faites pas ce petit geste… ne prenez pas ce
visage. Nous sommes amis depuis trois ans et l’autre jour je m’en
suis aperçu… Depuis l’autre jour…
Je me levai. Et comme si rien n’eût été dit depuis que nous
parlions de la vieille maison, de Chayère et de ses meubles :
— Maintenant, proposai-je, je vais vous montrer le jardin.
— Si vous voulez, accepta Philippe Fabréjol.
Et il ne s’irritait pas d’avoir été interrompu parce qu’il savait bien
que, malgré tout, il parlerait comme il avait décidé de le faire.
Descendant avec moi les longues marches plates, il admira les
fleurs de fer qui s’entrelaçaient à la rampe rouillée. Il regarda la
fontaine et le mascaron qui rejetait son eau limpide, et les autres
mascarons accrochés tout autour à la muraille humide attendant un
acheteur, inutiles et n’ayant dans leur bouche large ouverte que la
toile tissée par les araignées fileuses. Puis il reprit avec sa fermeté
tranquille :
— Depuis l’autre jour je n’ai véritablement pas cessé de penser à
vous. Et je me demande d’où vient cela, car je ne crois pas vous
aimer encore. Cependant, tout en parlant avec mon père de notre
prochain départ et de notre long séjour là-bas, j’ai senti une espèce
de tristesse, profonde et brusque. J’en ai cherché la raison, et j’ai
compris qu’il me serait pénible, je puis même dire douloureux, de ne
plus vous revoir. Pourquoi ?… Je n’en sais rien. Je ne vais pas me
mettre à vous parler de vos yeux, ni de votre grâce, ni de cette âme
frémissante que l’on sent passer dans les petits mots que vous dites.
Je ne tiens pas à vous faire de compliments. Je vous dis
simplement : cela est ainsi. Et je suis venu vous demander…
Je compris qu’il me regardait, je le sentis. Mais je baissai la tête,
et sans force pour l’interrompre, je contemplai fixement, en bordure
de la terre humide, les petits buis irréguliers.
— Je suis venu vous demander : dois-je partir tout de suite… dès
la fin de ce mois-ci ?… C’est tout… Je ne vous demande rien d’autre
que cette petite indication sur la conduite à suivre. Personnellement,
je puis retarder ce départ. Mon père me précéderait là-bas de six ou
huit semaines… Pendant ce temps, si vous êtes ici, nous nous
rencontrerions quelquefois… et si vous êtes à Lagarde, je puis très
souvent y avoir affaire… Alors je crois que nous deviendrions
vraiment deux amis… Plus tard, quand enfin je partirai, nous aurions
les lettres, qui sont un grand bonheur… Et puis… on ne sait pas…
Je reviendrai, et certes sans laisser cette fois passer trois années…
On ne sait pas… Il ne faut pas regarder trop loin… C’est aujourd’hui
qui nous fait du mal ou qui nous donne la joie… et c’est aujourd’hui
que je vous demande : à quelle date dois-je quitter la France ?…
Cela seulement, je ne demande que cela…
Il ne cherchait à prendre ni mon bras, ni ma main. Il parlait
lentement. Mais comme il s’était arrêté devant moi, il me fallut bien
lever la tête, et laissant une seconde mes yeux se prendre dans les
clairs yeux bleus, je fus une fois de plus tout envahie d’une douleur
qui m’épouvanta.
— Partez… il faut que vous partiez tout de suite.
— Oh ! non, dit en souriant Philippe Fabréjol. Ce n’est pas ainsi
que vous devez répondre. C’est très sérieux, puisque vous pouvez
me faire vraiment du mal. Il faut réfléchir. Vous réfléchirez huit jours
et puis vous me direz…
— Je vous dirai la même chose.
— Je n’en sais rien, déclara-t-il, et vous non plus.
Les murs étaient plus hauts, les lierres plus épais. Nous
tournions lentement dans la prison verte. Quand nous nous
retrouvâmes devant le large escalier, Philippe Fabréjol me tendit la
main.
— Au revoir, madame. Dans huit jours à cette même heure, si
elle vous convient, je vous attendrai au musée Calvet. Les salles en
sont désertes. Il vient seulement quelques étrangers, et d’ailleurs
vous n’aurez qu’une date à me dire.
Il serrait mes doigts, fortement et franchement, et sans pression
sournoise. A travers le couloir dallé je le reconduisis jusqu’à la porte
de la rue. Une fois encore, au fond des salles ouvertes, les glaces
troubles reflétèrent nos silhouettes rapprochées.
— Au revoir, dit-il encore.
Et il ne me rappela pas, en me quittant, ce rendez-vous qu’il me
donnait dans huit jours au musée Calvet. Il ne s’inquiéta même pas
que je lui eusse, là-dessus, donné aucune réponse : il savait bien
que rien de tout cela n’était nécessaire.

*
* *

Ce soir-là, quand Fabien rentra, quand il me parla, j’eus


l’impression que je ne le voyais pas devant moi, et je ne voyais pas
autour de moi la chambre et cet ordre agréable qu’il me plaisait d’y
entretenir. J’apercevais seulement, dans l’ombre des platanes,
dansante un peu parce qu’un petit souffle venait de se lever entre
les feuilles, une jeune fille qui était là, par un matin de juin, avec sa
robe à pastilles et son simple chapeau rond. Elle me regardait. Elle
avait connu le dangereux sourire de François Landargues ; elle
connaissait la décevante misère qui occupait seule la petite âme de
Fabien Gourdon ; et son regard était triste. Mais je me penchais vers
elle, je lui disais : l’amour est venu. Et je ne pouvais éprouver rien
d’autre que la grande joie dont elle se mettait à trembler.
Ce fut ainsi ce soir-là, et le lendemain, et encore une autre et une
autre journée. Cela ne fait qu’un petit nombre d’heures, mais il y tint
plus de vie que dans toute la somme de mes pauvres années.
J’examinais cette joie qui ne ressemblait à nulle autre, je pressais
mes deux mains sur elle, et je les écartais un peu pour la revoir de
nouveau. Je lui portais en offrande mes grands désirs et mes petites
blessures : et tout le sang de celles-ci, dont elle se nourrissait, la
faisait plus éclatante et plus forte.
Délaissant et détestant les coutumières besognes, je ne pouvais
plus m’occuper à rien qu’à me pencher sur le jardin où m’avait parlé
Philippe Fabréjol ; mais toute baignée que je fusse à ma fenêtre de
son ombre humide et verte, il m’était bientôt nécessaire que ce jardin
m’enfermât davantage ; il me fallait sentir sous mes pas la terre où
Philippe avait marché. Je descendais donc ; je regardais à la rampe
du vieil escalier les fleurs de fer qui lui avaient plu, et je touchais un
peu plus loin les buis lustrés où reposaient mes yeux cependant qu’il
disait : « Nous sommes amis depuis très longtemps… » Il disait
encore : « Nous revoir quelquefois… » Il disait aussi : « Il y aura les
lettres… et puis je reviendrai. » Et comme il l’avait conseillé, sans
vouloir regarder plus loin que tous ces bonheurs, je fermais les yeux
sur ce qui pouvait advenir de lui et de moi…

Et puis je rentrais dans la salle où, d’abord, nous nous étions


assis. Pour que le jour y fût le même, je poussais un peu les volets.
Je m’approchais de ces glaces dont l’eau trouble avait en même
temps reçu son image et la mienne, tout près, si près que mon
visage n’était qu’une forme confuse derrière laquelle une autre forme
me semblait apparaître. — Enfin il me fallait bien regagner notre petit
appartement ; mais que la présence de Fabien m’y était importune !
Je ne lui parlais plus de ses livres : je ne m’intéressais plus à ce
maladroit article que sur mes instances il commençait d’écrire.
J’aurais voulu qu’il sortît chaque matin comme il faisait auparavant.
J’aurais voulu qu’il ne me demandât pas, le soir, de l’accompagner
dans ses promenades. Je serais partie seule dans la campagne, au
bord du fleuve agité, seule !… avec autour de moi, en moi, cette
secrète présence…
Quelques jours… Cela dura quelques jours… Un bien petit
nombre d’heures. J’avais perdu tous les souvenirs de ma vie étroite
et réfléchie. Je ne pensais pas que le mal existât. Je ne redoutais
rien. J’attendais tout. Il n’y avait plus de détresse en moi, plus de
pitié, pas de remords. La joie, seulement, la joie !
Elle ne se précisait par aucune image. C’était une sorte de
frémissement merveilleux et confus. Je ne cessais plus de penser à
Philippe Fabréjol et de souhaiter sa présence, et cependant je ne
savais encore ce que je lui répondrais quand il me faudrait le revoir.
Il me parut un matin que j’y réfléchissais tout à coup. Je pensais :
« Plus que cinq jours, avant ce jeudi… Dans cinq jours… » Et alors
seulement un peu d’inquiétude commença de se mêler à mon
profond bonheur.
Il me devint nécessaire de préparer mon courage. Je voulus voir
ce musée Calvet où j’entrerais bientôt pour y rencontrer un jeune
homme que je connaissais peu, et pour lui dire, afin qu’il comprît
bien que je tenais à lui : « Ce n’est pas tout de suite que vous devez
partir… Nous nous reverrons comme vous le demandez. » Et j’y allai
le lendemain pendant que Fabien, s’intéressant chaque jour un peu
plus aux études que je lui avais conseillées, s’était rendu à la
bibliothèque pour y examiner certains ouvrages.
J’arrivai donc devant ce musée, j’en franchis la grille, et je dis au
gardien que j’étais déjà venue et qu’il pouvait me laisser seule. Dans
les salles matinales il n’y avait personne que le soleil couché sur les
parquets luisants et le peuple silencieux des visages peints et des
figures de pierre. Les uns et les autres m’intimidaient un peu. Et je
voulus d’abord essayer de les admirer afin qu’ils ne fussent pas trop
surpris de ma présence inattentive. Je les contemplai donc
longuement, mais sans bien les voir, et j’allai m’asseoir enfin dans la
troisième salle. Alors je ne sais quelles pensées auxquelles je ne
commandais pas commencèrent de m’absorber. Comme les formes
peintes et les formes de pierre qui m’entouraient, elles étaient là, je
voulais les regarder et je n’en distinguais aucune. A tout instant,
lassée de cette méditation confuse et que j’imaginais inutile, je
voulais me lever pour partir et cependant il m’était impossible de ne
pas rester à cette place.
Je m’y attardai si bien que le gardien tout à coup parut au seuil
de la porte. Il venait brusquement de se rappeler ma présence et
craignait que je ne fusse malade. J’étais très confuse. Je lui dis
qu’en effet j’éprouvais un peu de fatigue, et je m’en allai vite. Ma tête
était pesante de toutes les choses qui l’avaient traversée ; mais je ne
les connaissais pas, et je continuais de ne pas savoir ce qu’il me
faudrait dire à Philippe Fabréjol.
Il était tard quand je rentrai. Cependant, Fabien n’était pas là ;
mais je l’avais oublié ; son absence à cette heure ne m’étonna pas ;
et j’allai tout de suite me pencher à la fenêtre afin de revoir le jardin.
Alors, je tressaillis en apercevant mon mari qui s’y promenait
lentement. Jamais encore, je crois, il n’y était descendu. Et ma
surprise aussitôt se mêla d’irritation. Il observait les fleurs de la
rampe qui avaient plu à Philippe. Il contemplait l’eau coulant du
mascaron de pierre, il touchait distraitement les petits buis lustrés :
et il me paraissait que chacun de ses regards, chacun de ses
gestes, écartait de là les ombres heureuses. J’avais envie de lui
crier : « Va-t’en. Tu n’as pas le droit d’être dans ce jardin, tu n’en as
pas le droit. » Mais levant la tête, il m’aperçut, poussa une
exclamation presque joyeuse et se jeta dans la maison.
J’entendis dans l’escalier un pas précipité. Et voici que je me
rappelai la nuit où je l’avais entendu monter ainsi, la nuit où on l’avait
appelé près de François Landargues. Avais-je donc oublié cette nuit-
là ?… Il me semblait brusquement en retrouver le souvenir…, le
souvenir aussi du matin qui avait suivi et du premier soir où j’avais
revu Fabien, hagard et ruisselant après sa course sous l’orage. Et je
crois que d’abord, une seconde, quand il entra, je tournai vers lui ce
même visage où montait l’épouvante d’une interrogation qui ne
pouvait se formuler.
— Ah ! dit-il sans remarquer rien, te voilà. J’étais inquiet.
— De quoi donc ? Que pouvait-il m’arriver ?
— Je n’en sais rien… C’est que, vois-tu (et malgré qu’il fût encore
près de la porte, à l’autre bout de la pièce, j’avais l’impression
physique de sentir toute sa peine trembler et se presser contre mon
épaule), vois-tu, maintenant, je ne puis plus me passer de toi.

*
* *

Il avait parlé ainsi. J’avais cru sentir se réfugier contre moi cette
grande détresse. Et j’avais vu monter dans ses yeux une tendresse
implorante qui ne s’y était jamais montrée. Mais mon âme la
meilleure, qui se fût émue de tout cela, continuait d’être absente, et
ce qui avait pu naître durant ces quelques semaines n’existait plus à
côté de ce qui était né depuis ces quelques jours.
Je le croyais du moins… je le croyais… Mais pourquoi les
ombres heureuses s’en étaient-elles véritablement allées du jardin ?
Quand je descendis un peu plus tard, comme chaque jour, pour les y
chercher, je ne pus les retrouver. — Et je sentais maintenant à leur
place rôder cette ombre pesante qui s’attachait à Fabien et qu’il me
fallait traîner avec lui.
Notre promenade ce jour-là nous conduisit au delà du Rhône,
jusqu’à Villeneuve, si morne, si morte, avec ses rues où pousse
l’herbe et ses palais abandonnés. Au retour, comme nous étions las,
nous nous assîmes un instant au bord de la route. Le soir venait. Il
faisait presque froid. Autour de nous, parmi la campagne, et devant
nous dans Avignon, les lampes s’allumaient au fond des maisons.
Enveloppée dans mon manteau, tout près de Fabien qui se
serrait contre moi, je pensais à notre maison qui était là-bas, un peu
plus au nord, derrière les collines déjà bien sombres sur le ciel gris.
En ce moment Adélaïde avait, elle aussi, allumé la lampe et
Guicharde s’asseyait devant la table pour m’écrire une fois de plus :
« Quand allez-vous revenir ? » C’est la question que, depuis une
semaine, me posaient toutes ses lettres. Elle trouvait le temps long.
Elle s’ennuyait. Elle s’étonnait un peu. « Fabien, remarquait-elle, doit
avoir pris maintenant tout le repos nécessaire. » Pensant à elle, je
pensais à ce foyer dont elle était restée la gardienne. Y reviendrions-
nous jamais ? Pourrions-nous y revenir et recommencer de vivre là
comme nous y avions vécu après que Fabien m’aurait enfin parlé,
quand nous aurions regardé ensemble dans le passé la minute
effrayante, et dans l’avenir, tous les jours, tous les mois et les
longues années ?…

… Au moment même où je m’interrogeais ainsi, cet avenir et ce


passé ne prenaient plus soudain qu’une petite importance. Je les
distinguais à peine. Je les écartais de moi. Je rentrais à Lagarde ; j’y
retrouvais ma rue obscure, ma maison ennuyeuse, ma chambre
triste. Mais Philippe Fabréjol marchait dans la rue pour venir me
voir ; mais il entrait dans la maison ; mais je m’enfermais dans la
chambre pour lire ses lettres, pour y répondre ; et j’aimais la rue, la
chambre, et la maison…
Fabien soudain me toucha doucement le bras. Lui aussi regardait
autour de nous les lampes aux fenêtres et sans doute elles l’avaient,
lui aussi, ramené vers sa demeure.
— Je ne t’ai pas dit… Hier, j’ai écrit à Fardier.
Il n’avait pas prononcé ce nom depuis notre arrivée à Avignon. Je
tressaillis. Je le regardai. Mais l’ombre déjà faisait son visage
indistinct.
— Tu lui as écrit… pourquoi ?…
— Pour qu’il me dise.
— Quoi donc ?…
— Ce qui se passe là-bas.
Et s’abandonnant enfin, la tête contre mon épaule :
— Oh !… si tu savais !… si tu savais !…
Nous étions assis au bord de la route déserte et froide, comme
deux vagabonds. Notre maison était là-bas, où peut-être nous ne
retournerions plus, et toute la vie s’assombrissait autour de nous
comme cette campagne où les volets commençaient de se clore l’un
après l’autre sur les lumières entrevues. Nous étions comme deux
pauvres au bord de la route, seuls, tout seuls, avec ce souvenir,
avec cette hantise, avec cette douleur…
Et, pour la seconde fois sentant venir vers moi l’aveu redoutable,
pour la seconde fois aussi je pensais : enfin !… enfin !… J’attendais,
tremblant un peu, pressant l’une contre l’autre mes deux mains qui
devenaient froides. Et l’aidant, le soutenant déjà, je murmurais aussi
douloureusement, aussi secrètement que lui-même :
— Je sais… je sais…
Mais pas plus que le jour où il ne voulut pas assister au déjeuner
des Fabréjol, Fabien ne put aller jusqu’au bout de sa confidence. Un
moment après seulement, un long moment, ayant repris un peu de
calme, il calcula :
— Fardier me répondra par le retour du courrier. Mais la poste
est fort irrégulière en ce moment. Je ne pense pas recevoir sa lettre
avant jeudi.
Il soupira profondément. Et sans rien ajouter là-dessus, sans plus
vouloir qu’on en parlât :
— Rentrons, dit-il.
La nuit était venue. Il n’y avait pas de lune. Nous marchions
lentement, trébuchant sur les cailloux épars, au bord des ornières
profondes. C’est lui qui avait pris mon bras, et il s’y appuyait
quelquefois.

*
* *

Qu’avait-il demandé ? Qu’allait-on lui répondre ?


Que savait Fardier ? Mille imaginations m’envahissaient,
confuses et violentes. Je ne savais pas ce qui avait pu se passer à
Lagarde, autour de ce mort, depuis notre absence. Je ne savais pas
ce que Fabien souhaitait ou redoutait d’apprendre. Mais sur cette
route où il tenait mon bras, où nous trébuchions dans l’ombre, où
nous étions seuls, j’eus tout à coup la certitude qu’après avoir reçu
cette lettre, quoi qu’elle fût, Fabien me dirait tout, qu’il ne pourrait
pas ne pas tout me dire. La certitude, et non plus comme tout à
l’heure, et non plus comme l’autre matin où le courage lui manquait
pour m’accompagner à Pampérigouste, le vague et anxieux
pressentiment. La certitude ! Jeudi, ce serait pour jeudi. Et cette fois,
c’est bien, en vérité, que le moment était venu de préparer dans mon
cœur les paroles nécessaires. Déjà je les sentais venir, hésitantes à
la fois et tumultueuses, si simples et cependant presque sacrées,
puisqu’elles devaient déterminer l’avenir, tout l’avenir, le mien sans
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

ebookmass.com

You might also like